将声音添加到android系统声音

问题描述 投票:0回答:0

大家好我正在尝试将资产文件夹中的一些 mp3 文件添加到 android 系统声音通知..

我的问题是:

  1. 要将资产中的声音添加到系统声音,我需要使用以下代码获得存储权限:

    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)
    

    }

  2. 当更改 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)


}
  1. 我的另一个问题显然是这条线不起作用 requireContext().contentResolver.delete( Media.EXTERNAL_CONTENT_URI, MediaStore.MediaColumns.DATA + "='" + file.getAbsolutePath() + "'", null ) 声音加了好几次... 提前致谢。
android android-contentresolver
© www.soinside.com 2019 - 2024. All rights reserved.