デフォルトの着信音ピッカーで選択できる特定の着信音でアラームする必要のあるアプリがあります。外部着メロ音が使用されている場合、MediaPlayerはnullです
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.setup_ringtone));
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, SharedPrefUtil.getRingtone() != null ? Uri.parse(SharedPrefUtil.getRingtone()) : null);
this.startActivityForResult(intent, SELECT_RINGTONE);
、それは私がonActivityResult
Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (uri != null) {
SharedPrefUtil.setRingtone(uri.toString());
}
に共有設定にそのパスを保存し、後でこのようなMediaPlayerの中でそれを使用する選択された後:デフォルトのデバイスの着信音の場合には
MediaPlayer mp = MediaPlayer.create(ContextProvider.getAppContext(), Uri.parse(SharedPrefUtil.getRingtone()));
mp.setLooping(true);
mp.start();
それはうまく動作します。
私は電話着信音としていくつかの曲を設定すると、着信音ピッカーに表示されます。 MediaPlayerを選択すると、初期化時に常にnullになります。ただし、コンテンツ:// media/external/audio/media/366。 ただし、Uri.parse(SharedPrefUtil.getRingtone())は私に通常の値を返します。他のデフォルトの着信音と同じですが、別のIDだけです。
着信音ピッカーのために選択されたとして、私はあなたが外部ストレージに保存されているカスタム着信音を使用する場合は、RingtoneManagerはあなたの場合を除き、それを開くことができない、ここで
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, SharedPrefUtil.getRingtone() != null ? Uri.parse(SharedPrefUtil.getRingtone()) : null);