我正在构建一个从Firebase获取音频文件的应用,将它们保存在设备上,然后将该音频文件用作通知声音。
我无法将音频文件作为通知声音播放。
似乎Android只想要存储在Resources(/ res)文件夹中的声音。相反,您似乎无法以编程方式将文件添加到/ res文件夹。
希望对最佳方法做一些澄清。谢谢
答案 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);