Android 使用外部铃声时,MediaPlayer为空
我有一个应用程序,应该与特定的铃声,可以选择默认铃声选择器报警Android 使用外部铃声时,MediaPlayer为空,android,android-mediaplayer,Android,Android Mediaplayer,我有一个应用程序,应该与特定的铃声,可以选择默认铃声选择器报警 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
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在初始化时总是为空。
但是,Uri.parse(SharedPrefUtil.getRingtone())返回正常值-content://media/external/audio/media/366。与其他默认铃声相同,只是使用另一个id
另外,当我在这里将它设置为选中的铃声选择器时,它会被识别
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, SharedPrefUtil.getRingtone() != null ? Uri.parse(SharedPrefUtil.getRingtone()) : null);
如果您使用存储在外部存储器上的自定义铃声,则除非您的应用程序具有访问外部存储器的权限,否则RingtoneManager将无法打开它 将缺少的权限添加到清单文件:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
如果您使用存储在外部存储器上的自定义铃声,则除非您的应用程序具有访问外部存储器的权限,否则RingtoneManager无法打开它 将缺少的权限添加到清单文件:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />