我试图从设备内部和外部存储中获取所有音频文件。所以我使用的是mediastorage和cursor。但是我无法获得任何正确的歌曲检索示例。
我使用了这段代码:
public class SongDto {
public long songId;
public String songTitle;
public String songArtist;
public String path;
public short genre;
public long duration;
public String album;
public Bitmap albumArt;
public String toString() {
return String.format("songId: %d, Title: %s, Artist: %s, Path: %s, Genere: %d, Duration %s",
songId, songTitle, songArtist, path, genre, duration);
}
}
和
{{1}}
我得到一个运行时错误我修复了SimpleCursorAdapter,因为它已被弃用如何获取歌曲以及我在设置适配器时所做的错误,任何示例或提示都会有所帮助。
答案 0 :(得分:0)
如果您愿意,可以实现文件浏览器。您可以在以下示例中找到文件浏览器和文件夹浏览器实现。 Link
答案 1 :(得分:0)
你可以这样做(kotlin):
//fetch the audio files from storage
val contentResolver = this.contentResolver
val uri: Uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
val cursor: Cursor? = contentResolver?.query(uri, null, null, null, null)
//looping through all rows and adding to list
if (cursor != null && cursor.moveToFirst()) {
do {
val title: String = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))
val artist: String = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST))
val duration: String = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION))
val url: String = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA))
val modelAudio = ModelAudio()
modelAudio.setaudioTitle(title)
modelAudio.setaudioArtist(artist)
modelAudio.setaudioUri(url)
modelAudio.setaudioDuration(duration)
audioArrayList.add(modelAudio)
} while (cursor.moveToNext())
}
在清单中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
检查权限(dexter):
private fun checkPermissions() {
Dexter.withActivity(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(object : PermissionListener {
override fun onPermissionGranted(permissionGrantedResponse: PermissionGrantedResponse) {
}
override fun onPermissionDenied(permissionDeniedResponse: PermissionDeniedResponse) {}
override fun onPermissionRationaleShouldBeShown(
permissionRequest: PermissionRequest,
permissionToken: PermissionToken
) {
// asking for permission
permissionToken.continuePermissionRequest()
}
}).check()
}
依赖:)
implementation 'com.karumi:dexter:6.2.2'