2017-07-07 15 views
1

デフォルトの着信音ピッカーで選択できる特定の着信音でアラームする必要のあるアプリがあります。外部着メロ音が使用されている場合、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); 

答えて

0

それを設定した場合も、それは認識されていますappに外部ストレージにアクセスする権限があります。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

は、マニフェストファイルに不足している権限を追加します

関連する問題