获取Android的自定义铃声来电

时间:2016-12-10 04:33:57

标签: android phone-call ringtone

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

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

但我希望获得由其他应用程序设置的自定义铃声。 我怎么能得到它?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

READ_EXTERNAL_STORAGE

让我举个例子:

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

没有READ_EXTERNAL_STORAGE权限:上面的代码将返回Android设备的默认铃声

但是,如果其他应用程序更改自定义铃声与#34; Banana.mp3" (小人 - 你知道对吗?哈哈)

使用READ_EXTERNAL_STORAGE权限:您将收到香蕉之歌

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

答案 2 :(得分:-1)

您必须在Media的数据库中插入该自定义铃声。

试用此代码它将解决您的问题。

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);

好运