大家好我正在尝试将资产文件夹中的一些 mp3 文件添加到 android 系统声音通知..
我的问题是:
要将资产中的声音添加到系统声音,我需要使用以下代码获得存储权限:
fun addSounds() {
val file = File(requireContext().filesDir, "notifications")
if (!file.exists())
file.mkdirs()
val soundFile = File(file.absolutePath + "/" + "longbeep.mp3")
requireContext().assets.open("long_beep.mp3").use { input ->
soundFile.outputStream().use { output ->
input.copyTo(output, 1024)
}
}
registerFile(soundFile, "ShahramLong2")
}
private fun registerFile(file: File, fileName: String) {
val values = ContentValues()
values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, fileName);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.MediaColumns.SIZE, file.length());
values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
val generalaudiouri = Media.EXTERNAL_CONTENT_URI
val uri = Media.getContentUriForPath(file.absolutePath)
requireContext().contentResolver.delete(
Media.EXTERNAL_CONTENT_URI,
MediaStore.MediaColumns.DATA + "='" + file.getAbsolutePath() + "'",
null
)
requireContext().contentResolver.insert(Media.EXTERNAL_CONTENT_URI, values)
}
当更改 registerFile
到以下代码时,应用程序异常崩溃 Caused by: java.lang.UnsupportedOperationException: Writing to internal storage is not supported. at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:174) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
代码是:
private fun registerFile(file: File, fileName: String) {
val values = ContentValues()
values.put(MediaStore.MediaColumns.DATA, file.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, fileName);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.MediaColumns.SIZE, file.length());
values.put(MediaStore.Audio.Media.IS_RINGTONE, false);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);
val generalaudiouri = Media.EXTERNAL_CONTENT_URI
val uri = Media.getContentUriForPath(file.absolutePath)
// use uri instead of Media.EXTERNAL_CONTENT_URI
requireContext().contentResolver.delete(
uri!!,
MediaStore.MediaColumns.DATA + "='" + file.getAbsolutePath() + "'",
null
)
requireContext().contentResolver.insert(uri!!, values)
}
requireContext().contentResolver.delete( Media.EXTERNAL_CONTENT_URI, MediaStore.MediaColumns.DATA + "='" + file.getAbsolutePath() + "'", null )
声音加了好几次...
提前致谢。