如何在Android N上以编程方式将音频设置为铃声

时间:2016-09-02 05:56:39

标签: android android-7.0-nougat

过去,我们可以使用以下代码将音频文件设置为铃声:

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

0 个答案:

没有答案