1

MediaStore.createWriteRequest() を使用して uri 許可を要求し、ユーザー許可を要求しても、曲のタイトル、アルバム、アーティストなどのオーディオ ファイルの MediaStore 列を更新できません。ContentResolver.update を実行すると、 noOfRowsUpdate は 1 になりますが、変更は適用されません。

private fun requestWritePermission(uri: Uri){
    if (VERSION.SDK_INT >= VERSION_CODES.R) {
        val uriList = mutableListOf<Uri>(uri)
        val pi = MediaStore.createWriteRequest(contentResolver, uriList)
        try {
            startIntentSenderForResult(
                pi.intentSender, REQUEST_PERM_WRITE, null, 0, 0,
                0
            )
        } catch (e: SendIntentException) {
        }
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, intentData: Intent?) {

  if(requestCode == REQUEST_PERM_WRITE && resultCode == Activity.RESULT_OK){
      updateAudioTags
  }

  super.onActivityResult(requestCode, resultCode, intentData)
}

private fun updateAudioTags() {
    val uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            trackId)

    val contentValues = ContentValues()

    if (hasQ()) {
        contentValues.put(MediaStore.Audio.Media.IS_PENDING, 1)
        application.contentResolver.update(uri, contentValues, null, null)
    }

    contentValues.clear()

    if (hasQ()) contentValues.put(MediaStore.Audio.Media.IS_PENDING, 0)

    contentValues.put(MediaStore.Audio.Media.TITLE, "New title")
    contentValues.put(MediaStore.Audio.Media.ALBUM, "New album")
    contentValues.put(MediaStore.Audio.Media.ARTIST, "New artist")

    val rowsUpdated = application.contentResolver.update(uri, contentValues,
            null, null)

    Log.i(TAG, "updateAudioTags() :: no of rowsUpdated : $rowsUpdated")
}

(Google イシュー トラッカーで同じ問題を提起しました - https://issuetracker.google.com/issues/173134422 )

4

0 に答える 0