获取 Android 的自定义来电铃声

Get custom ringtone incoming call of Android

我可以使用下面的代码获取来电的当前铃声

 Uri defaultRintoneUri = RingtoneManager.getActualDefaultRingtoneUri(
            getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
 defaultRingtone = RingtoneManager.getRingtone(getApplicationContext(),
            defaultRintoneUri);

但是我想获取由其他应用程序设置的自定义铃声。 我怎样才能得到它?

您必须在媒体数据库中插入自定义铃声。

试试这个代码它会解决你的问题。

File path = new File(path, "mysong.mp3"); // Path of your custom ringtone file.

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, path.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title"); // Title
values.put(MediaStore.MediaColumns.SIZE, 215454); // Size of file
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); // File Format
values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
values.put(MediaStore.Audio.Media.DURATION, 230);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false); // Default is false
values.put(MediaStore.Audio.Media.IS_MUSIC, false); // Default is false

//Insert the whole content in the Media database.
Uri uri = MediaStore.Audio.Media.getContentUriForPath(path.getAbsolutePath());
Uri newUri = main.getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(
myActivity,
RingtoneManager.TYPE_RINGTONE,
newUri);

祝你好运

如果铃声仅用于该应用程序,则该铃声文件可能是私有的并且仅由该应用程序拥有。您无权访问它,这是 Android 上的安全系统。每个应用程序基本上都作为不同的 Linux 用户运行。

另一方面,如果为铃声系统设置了铃声,则该文件将在所有应用程序之间共享。在这种情况下,文件存储在 public 文件夹中,RingtoneManager 将为您正确提供当前铃声。

我找到了答案。实际上,铃声管理器会给我们 Android 设备的默认铃声。但是如果铃声被其他应用程序改变了,我们想要得到它。我们需要权限

READ_EXTERNAL_STORAGE

让我举个例子:

Uri defaultRintoneUri = RingtoneManager.getActualDefaultRingtoneUri(
            getApplicationContext(), RingtoneManager.TYPE_RINGTONE);
 defaultRingtone = RingtoneManager.getRingtone(getApplicationContext(),
            defaultRintoneUri);

没有 READ_EXTERNAL_STORAGE 许可:以上代码将 return Android 设备的默认铃声

但如果其他应用程序将自定义铃声更改为 "Banana.mp3" 之类的歌曲(小黄人 - 你知道吗?哈哈)

并获得 READ_EXTERNAL_STORAGE 许可:您将完全收到 Banana 歌曲

没有 READ_EXTERNAL_STORAGE 权限:Android 设备的默认铃声。