![](/img/trans.png)
[英]java.lang.UnsupportedOperationException: Unsupported Service: accessibility android studio
[英]Android: cannot play a song - java.lang.UnsupportedOperationException: Unknown or unsupported URL
我正在嘗試播放我放在 SD 卡音樂文件夾中的歌曲。 但是當我調用mediaPlayer?.setDataSource(this@MusicPlayerActivity, uri)
我得到異常:“java.lang.UnsupportedOperationException: Unknown or unsupported URL: content://media/external/audio/media/samurai.mp3”
我在readSongs()
function 中得到一個 URI。 URI 有問題嗎? 如果有,如何獲得正確的 URI?
謝謝。
代碼片段
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
}
我用MediaStore.Audio.Media.DISPLAY_NAME
替換了MediaStore.Audio.Media._ID
,因此 URI 變為“content://media/external/audio/media/42”,現在它可以工作了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.