gpt4 book ai didi

android - 如何在不将其设置为默认值的情况下使用 URL 以编程方式播放通知声音?

转载 作者:行者123 更新时间:2023-11-29 19:29:53 27 4
gpt4 key购买 nike

我正在使用以下代码获取 Android 设备上可用的通知声音列表:

public static ArrayList<String> getNotificationSounds(Activity curActivity) {
RingtoneManager manager = new RingtoneManager(curActivity);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();

ArrayList<String> list = new ArrayList<>();
while (cursor.moveToNext()) {
String id = cursor.getString(RingtoneManager.ID_COLUMN_INDEX);
String uri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX);
String name = cursor.getString((RingtoneManager.TITLE_COLUMN_INDEX));

list.add(name);
}

return list;
}

现在我想播放这些通知声音之一(没有图像或标题),只是声音 没有将其设置为默认值。

我见过许多建议使用

设置默认声音的解决方案
RingtoneManager.setActualDefaultRingtoneUri(this,RingtoneManager.TYPE_NOTIFICATION,soundClipUri);

通过使用我从上述方法获得的这个 URI

String uri = cursor.getString(RingtoneManager.URI_COLUMN_INDEX);

我收到一条错误消息,指出数据源无效。

所以,总结一下,

1) 如何在不设置为默认的情况下播放通知声音?

2)如何获取和使用该通知声音的Uri?

编辑:当我尝试从上面提到的游标查询中打印 URI 时,我得到了相同的结果:

content://media/internal/audio/media

所有可用的通知声音。

我们是否应该将通知声音标题附加到此并将结果作为 Uri 传递?

播放通知的代码:

 Ringtone r = RingtoneManager.getRingtone(getApplicationContext(),uri);
r.play();

最佳答案

找到了解决我的问题的方法。

我需要将通知声音的 ID 附加到该方法返回的 URI,以便可以正确定位内部通知声音。

这是解决方案,我获取通知声音的 URI 并使用以下代码播放它:

 try 
{
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), PhoneUtils.getNotificationSoundUri(getApplicationContext(), getSoundClipID()));
r.play();
}
catch (Exception e)
{
e.printStackTrace();
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), getSoundClipID()));
r.play();

}

getNotification 声音 URI 方法的代码:

public static Uri getNotificationSoundUri(Context context,String soundClipId)
{
RingtoneManager manager = new RingtoneManager(context);
manager.setType(RingtoneManager.TYPE_NOTIFICATION);
Cursor cursor = manager.getCursor();

ArrayList<NotificationSound> list = new ArrayList<>();
while (cursor.moveToNext()) {
if(soundClipId.equals(cursor.getString(RingtoneManager.ID_COLUMN_INDEX)))
{
return Uri.parse(cursor.getString(RingtoneManager.URI_COLUMN_INDEX)+"/"+cursor.getString(RingtoneManager.ID_COLUMN_INDEX));
}

}

return RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}

关于android - 如何在不将其设置为默认值的情况下使用 URL 以编程方式播放通知声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40264407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com