4

Samsung デバイスのみで奇妙なクラッシュに直面しています。

以下のスタックトレースを参照してください。

Fatal Exception: com.pilabs.musicplayer.tageditor.TagEditFailedException: Tag edit failed : Changing volume from /storage/3964-3431/Music/Bujji-MassTamilan.io.mp3 to /storage/emulated/0/Music/.pending-1608532169-Bujji-MassTamilan.io.mp3 not allowed
   at com.pilabs.musicplayer.tageditor.PiTagEditor.handleException(PiTagEditor.java:643)
   at com.pilabs.musicplayer.tageditor.PiTagEditor.editTrackTagInfoImpl(PiTagEditor.java:217)
   at com.pilabs.musicplayer.tageditor.PiTagEditor.access$setUiCallback$p(PiTagEditor.java:37)
   at com.pilabs.musicplayer.tageditor.PiTagEditor$editTrackTagInfo$1.invokeSuspend(PiTagEditor.java:79)
   at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(BaseContinuationImpl.java:33)
   at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.java:238)
   at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.java:594)
   at kotlinx.coroutines.scheduling.CoroutineScheduler.access$createdWorkers(CoroutineScheduler.java:60)
   at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.java:742)

TagEditFailedException私自身の書面による例外はどこにありますか。実際の例外は、

java.lang.IllegalArgumentException: Changing volume from /storage/3964-3431/Music/Bujji-MassTamilan.io.mp3 to /storage/emulated/0/Music/.pending-1608532169-Bujji-MassTamilan.io.mp3 not allowed

何よりも探して

Changing volume from /storage/3964-3431/Music/Bujji-MassTamilan.io.mp3 to /storage/emulated/0/Music/.pending-1608532169-Bujji-MassTamilan.io.mp3 not allowed

コードをデバッグしたところ、他のメタデータを更新する前に IS_PENDING を更新するとアプリがクラッシュすることがわかりました。

private fun updateNameChangesInAndroidDb(application: Application, editTrackTagInfo: EditTrackTagInfo) {

    val uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            editTrackTagInfo.trackId.toLong())

    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)

    with(editTrackTagInfo) {
        title?.let { it -> contentValues.put(MediaStore.Audio.Media.TITLE, it) }
        album?.let { it -> contentValues.put(MediaStore.Audio.Media.ALBUM, it) }
        artist?.let { it -> contentValues.put(MediaStore.Audio.Media.ARTIST, it) }
    }

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

アプリがクラッシュする

application.contentResolver.update(uri, contentValues, null, null)

IS_PENDING を 1 に更新中

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

is_pending を更新すると、ボリュームが SD_Card から内部ストレージ (/storage/emulated/0...) に変更される理由がわかりません。

  • Android 11 デバイスでのみアプリがクラッシュします。それもSamsungデバイスのみ。編集しようとしているトラックが SD-CARD の場合も同様です。
  • Android 11 ピクセル デバイスで試してみましたが、問題なく動作します。
  • 編集しようとしているトラックは、場所の SdCard にあります

/storage/3964-3431/Music/Bujji-MassTamilan.mp3

  • samsung android 11 デバイスで IS_PENDING を 1 に更新しているときに、メディアのルートの場所が内部ストレージに変更される理由がわかりません

/storage/emulated/0/Music/...

概要 - メディア ファイルが SD カードからのものである場合、アプリは Android 11 Samsung デバイスでのみクラッシュします。

4

0 に答える 0