Android Notification Sound不是来自/ res

时间:2018-06-07 23:32:49

标签: java android

我正在构建一个从Firebase获取音频文件的应用,将它们保存在设备上,然后将该音频文件用作通知声音。

我无法将音频文件作为通知声音播放。

似乎Android只想要存储在Resources(/ res)文件夹中的声音。相反,您似乎无法以编程方式将文件添加到/ res文件夹。

希望对最佳方法做一些澄清。谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用MediaPlayer然后使用setDataSource(String path)并将其传递给文件路径。因为媒体子系统在不同的非特权进程中运行,所以路径需要是世界可读文件(例如,在外部存储器上)。例如,您可以将文件转储到Context.getExternalFilesDir()下的某个位置。

编辑:实际尝试回答有关通知的问题。

Notification.Builder.setSound()方法接受URI,但它不会说出什么类型的URI。如果您将代码放入NotificationManagerService中的平台,它会使用IRingtonPlayer播放声音(该界面不在公共SDK中)。最终使用另一个类/方法:Rintone.play()。据我所知,Ringtone只是包裹MediaPlayer

总而言之,您应该能够使用世界可读的文件URI调用setSound(),如:

Uri soundUri = Uri.parse("file://" + filePath.getAbsolutePath());
builder.setSound(uri, ...);

答案 1 :(得分:0)

这就是你需要的。

Uri tone = Uri.parse("android.resource://" + this.getPackageName() + "/"+R.raw.notification);
//notification refers to the file name of your mp3 file
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
       .setSmallIcon(R.mipmap.ic_launcher)
       .setContentTitle("Title")
       .setContentText("Message")
       .setSound(tone);