从存储中获取音频文件

时间:2016-06-12 04:48:34

标签: android cursor mp3 android-mediaplayer mediastore

我试图从设备内部和外部存储中获取所有音频文件。所以我使用的是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,因为它已被弃用如何获取歌曲以及我在设置适配器时所做的错误,任何示例或提示都会有所帮助。

2 个答案:

答案 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'