过去,我们可以使用以下代码将音频文件设置为铃声:
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, musicFile.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "my music");
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.MediaColumns.SIZE, 215454);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); // true for notification sound
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
Uri uri = MediaStore.Audio.Media.getContentUriForPath(musicFile.getAbsolutePath());
Strint where = MediaStore.MediaColumns.DATA + "=\""
+ newSoundFile.getAbsolutePath() + "\"";
getContentResolver().delete(uri, where, null);
Uri newUri = getContentResolver().insert(uri, values);
RingtoneManager.setActualDefaultRingtoneUri(
RingtonesPlaying.this, RingtoneManager.TYPE_RINGTONE, newUri);
但是,如果我们运行Nougat(7.0,API 24)以上的代码,我们将收到SecurityException
getContentResolver().insert()
我们未获得MANAGE_DOCUMENTS
的许可,即使我们在AndroidManifest
声明此权限,也会一直抛出。
我真的想将音频文件设置为铃声,因为我希望我的应用用户能够自定义通知声音。事实上,我们可以在N builder.setSound(Uri.fromFile(musicFile))
之前使用Notification
,但这种方法在N上也是禁止的,并且会抛出FileUriExposedException
。