简体   繁体   English

Android:无法播放歌曲 - java.lang.UnsupportedOperationException:未知或不支持 URL

[英]Android: cannot play a song - java.lang.UnsupportedOperationException: Unknown or unsupported URL

I'm trying to play a song which I put in Music folder on SD card.我正在尝试播放我放在 SD 卡音乐文件夹中的歌曲。 But when I call mediaPlayer?.setDataSource(this@MusicPlayerActivity, uri) I get the exception: "java.lang.UnsupportedOperationException: Unknown or unsupported URL: content://media/external/audio/media/samurai.mp3"但是当我调用mediaPlayer?.setDataSource(this@MusicPlayerActivity, uri)我得到异常:“java.lang.UnsupportedOperationException: Unknown or unsupported URL: content://media/external/audio/media/samurai.mp3”

I get an URI in the readSongs() function.我在readSongs() function 中得到一个 URI。 Is there any trouble with the URI? URI 有问题吗? If there is, how to get the right URI?如果有,如何获得正确的 URI?

Thanks.谢谢。

Code snippet代码片段

class MusicPlayerActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMusicPlayerBinding
    private lateinit var musicList: MutableList<Music>
    private lateinit var linearLayoutManager: LinearLayoutManager
    private lateinit var adapter: MusicAdapter
    private var mediaPlayer: MediaPlayer? = null
    private var currentTrackPosition: Int = 0
    private var isPlaying: Boolean = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMusicPlayerBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        musicList = mutableListOf()

        if (Build.VERSION.SDK_INT >= 23) {
            checkPermissions()
        }

        binding.playFab.setOnClickListener {
            play(currentTrackPosition)
        }
    }

    private fun play(currentTrackPosition: Int) {
        if (!isPlaying) {
            isPlaying = true
            mediaPlayer = MediaPlayer()
            mediaPlayer?.setAudioStreamType(AudioManager.STREAM_MUSIC)
            try {
                val uri = Uri.parse(musicList[currentTrackPosition].songUri)
                mediaPlayer?.setDataSource(this@MusicPlayerActivity, uri)
                mediaPlayer?.prepare()
                mediaPlayer?.start()
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }

    private fun readSongs() {
        val selection = MediaStore.Audio.Media.IS_MUSIC
        val projection = arrayOf(
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.DISPLAY_NAME
        )
        val uriExternal = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

        val cursor: Cursor? = contentResolver.query(
            uriExternal,
            projection,
            selection,
            null, null
        )

        while (cursor!!.moveToNext()) {
            musicList.add(
                Music(
                    cursor.getString(0),
                    cursor.getString(1),
                    Uri.withAppendedPath(uriExternal, cursor.getString(2)).toString()
                )
            )
        }

        cursor.close()

        linearLayoutManager = LinearLayoutManager(this)
        adapter = MusicAdapter(musicList)

        binding.recyclerView.layoutManager = linearLayoutManager
        binding.recyclerView.adapter = adapter
    }

I replaced MediaStore.Audio.Media.DISPLAY_NAME with MediaStore.Audio.Media._ID so URI becomes "content://media/external/audio/media/42" and now it works!我用MediaStore.Audio.Media.DISPLAY_NAME替换了MediaStore.Audio.Media._ID ,因此 URI 变为“content://media/external/audio/media/42”,现在它可以工作了!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.UnsupportedOperationException:不支持的服务:accessibility android studio - java.lang.UnsupportedOperationException: Unsupported Service: accessibility android studio java.lang.UnsupportedOperationException android arraylist - java.lang.UnsupportedOperationException android arraylist Android-错误java.lang.UnsupportedOperationException:JsonNull - Android - Error java.lang.UnsupportedOperationException: JsonNull Java.lang.UnsupportedOperationException Android Studio - Java.lang.UnsupportedOperationException Android Studio osmdroid - java.lang.UnsupportedOperationException - osmdroid - java.lang.UnsupportedOperationException Canvas中的java.lang.UnsupportedOperationException - java.lang.UnsupportedOperationException in Canvas 凌空java.lang.UnsupportedOperationException - Volley java.lang.UnsupportedOperationException 在Android上使用Net.WebSocket的“ java.lang.UnsupportedOperationException” - “java.lang.UnsupportedOperationException” using Net.WebSocket on android android在costom arrayadapter java.lang.UnsupportedOperationException中清除 - android clear in costom arrayadapter java.lang.UnsupportedOperationException 如何修复 java.lang.UnsupportedOperationException? (Kotlin - Android 工作室) - How to fix java.lang.UnsupportedOperationException ? ( Kotlin - Android Studio )
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM