在Android Api 29中,设置自定义铃声需要完成以下步骤:
在AndroidManifest.xml文件中添加以下权限:
从设备的外部存储器中获取自定义铃声的Uri: Uri ringtoneUri = Uri.parse("file:///sdcard/ringtone.mp3");
将自定义铃声的Uri存储到系统设置中: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // Android Q及以上版本需要使用ContentResolver调用方法 ContentResolver resolver = getContentResolver(); ContentValues values = new ContentValues(); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); values.put(MediaStore.Audio.Media.IS_ALARM, false); values.put(MediaStore.Audio.Media.IS_MUSIC, false); values.put(MediaStore.Audio.Media.IS_PODCAST, false); values.put(MediaStore.Audio.Media.IS_AUDIOBOOK, false); Uri newUri = resolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values); RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri); } else { // Android Q以下版本可以直接使用File调用方法 File file = new File(ringtoneUri.getPath()); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "My ringtone"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); values.put(MediaStore.Audio.Media.IS_ALARM, false); values.put(MediaStore.Audio.Media.IS_MUSIC, false); Uri newUri = getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(file.getAbsolutePath()), values); RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri); }
在setActualDefaultRingtoneUri()方法中指定铃声类型和铃声的Uri即可成功设置自定义铃声。例如将铃声类型设置为RingtoneManager.TYPE_RINGTONE,代码如下: RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, ringtoneUri);