我正在尝试播放通知中的声音,所以我有像
这样的代码Notification notification = new NotificationCompat.Builder(context)
.setSound(uri)
// ... more builder options
.build();
我尝试了两种不同的构建uri的方法。第一个是
Uri uri = Uri.parse(String.format("android.resource://%s/%d",
context.getPackageName(),
resourceId));
,第二个是
Uri uri = new Uri.Builder().scheme("android.resource")
.path("//")
.appendPath(context.getPackageName())
.appendPath(Integer.toString(resourceId))
.build();
如果我打印由这些技术生成的uris,我会得到一个相同的字符串:
android.resource://com.example.notification/2130968576
但是,当我使用第一种技术时会播放声音,但是当我使用第二种技术时声音不播放。这是为什么?
我在Android 4.3和Android 4.4上使用v4支持库观察到了这种行为。
答案 0 :(得分:0)
您必须在uri中设置正确的权限,而不是预先//
:
Uri uri = new Uri.Builder().scheme("android.resource")
.authority(context.getPackageName())
.path(Integer.toString(resourceId))
.build();
我承认它令人困惑,因为两种方法都返回相同的字符串并且比较相等,但这就是为我修复它的原因。