【发布时间】:2021-06-03 09:33:51
【问题描述】:
我正在开发 Mp3 播放器。我正在为此使用 curosr 。我的问题是重命名 pm3 文件后,光标无法找到该 mp3 文件。我查看了放置 mp3 文件的文件夹并对其进行了重命名。你有什么主意吗?我正在用光标获取音乐:
@RequiresApi(Build.VERSION_CODES.Q)
private fun getAllAudio(): ArrayList<Music> {
val tempAudioList = ArrayList<Music>()
val selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"
val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
Log.d("SONGS", uri.path!!)
val projection = arrayOf(
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.SIZE,
MediaStore.Audio.Media._ID
)
val cursor = this.contentResolver.query(
uri,
projection,
selection,
null,
null
)
if (cursor != null) {
while (cursor.moveToNext()) {
val path = cursor.getString(0)
val title = cursor.getString(1)
val artist = cursor.getString(2)
val album = cursor.getString(3)
val duration = cursor.getString(4)
val size = cursor.getString(5)
val id = cursor.getString(6)
val art = getAlbumArt(path)
val file = File(path)
Log.d("ALLSONGS", path)
if (file.exists()) {
val musicFiles = Music(path, title, artist, album, duration, size, id, art)
tempAudioList.add(musicFiles)
}
}
cursor.close()
}
return tempAudioList
}
我正在请求权限:
private fun askStoragePermissions() {
Dexter.withActivity(this)
.withPermissions(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
.withListener(object : MultiplePermissionsListener {
@RequiresApi(Build.VERSION_CODES.Q)
override fun onPermissionsChecked(report: MultiplePermissionsReport?) {
if (report!!.areAllPermissionsGranted()) {
Log.d("MAIN_ACTIVITY", "Permission granted")
musicList = getAllAudio()
}
if (report.isAnyPermissionPermanentlyDenied) {
}
}
override fun onPermissionRationaleShouldBeShown(
permissions: MutableList<PermissionRequest>?,
token: PermissionToken?
) {
token!!.continuePermissionRequest()
}
})
.onSameThread()
.check()
}
清单:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
重命名文件:
val newName = mView.edit_txt_new_title.text.toString()
val path = ArrayList(music.path.split('/'))
path[path.size - 1] = newName
var newPath = ""
for (i in 0 until path.size - 1) {
newPath += "${path[i]}/"
}
newPath += "$newName.mp3"
val file = File(music.path)
if (file.renameTo(File(newPath)))
if (File(newPath).renameTo(File(newPath)))
Toast.makeText(context, "DONE", Toast.LENGTH_LONG).show()
Log.d("RENAME", "$newPath -- ${music.path}")
【问题讨论】:
-
如果您按照上面所说的将其重命名为 pm3,则可能会这样做。 :) 话虽如此,细节缺失。您打开文件并开始播放,然后重命名它却找不到?或者确切的情况是什么?我很难确定事件的顺序。
标签: android kotlin rename mp3 audio-player