如何使用MediaStore将所有音乐文件存储在Android内部存储和外部存储中?

时间:2017-07-19 08:13:49

标签: android storage mediastore

我正在尝试将应用程序的内部存储和外部存储中的所有歌曲列为列表视图。我使用以下代码来获取歌曲

firstname

上述代码成功获取外部存储器中的所有歌曲,但未获取存储在内部存储器中的歌曲。这是三星Galaxy S8等没有外部存储设备的问题。 我也用下面的uri

尝试了光标
ContentResolver musicResolver = getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int titleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media._ID);
        int artistColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ARTIST);

        int durationColumn=musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DURATION);


        do {
            try {
                long thisId = musicCursor.getLong(idColumn);
                String thisTitle = musicCursor.getString(titleColumn);
                String thisArtist = musicCursor.getString(artistColumn);
                String duration = musicCursor.getString(durationColumn);
                if (!thisArtist.equalsIgnoreCase("<unknown>")) {
                    //save track
                }

            } catch (Exception e) {

            }
        }
        while (musicCursor.moveToNext());

这会让我获取设备铃声和短信铃声,这不是我需要的。

我在StackOverflow中遇到过类似的问题,那里的答案并没有为我解决这个问题。

请帮忙。 感谢。

2 个答案:

答案 0 :(得分:0)

我认为EXTERNAL这个词令人困惑。它用于解决内部存储器问题 扫描过程会将您的所有音乐输入媒体数据库,无论是在内部媒体还是外部媒体上(只需确保文件夹中没有隐藏的.nomedia文件)。下面的代码应该返回所有音乐。如果没有,那么我怀疑你的媒体数据库没有完全填充。

        public Cursor getAllTracks(Context context) {
    // gets all tracks
     Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    ContentResolver cr = context.getContentResolver();
    final String[] columns = {track_id ,track_no, artist, track_name,
            album, duration, path, year, composer};
    return cr.query(uri, columns, null, null, null);
}

答案 1 :(得分:0)

这对我有用。试试这个

 Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
    Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

                SongInfo s = new SongInfo(name, artist, url);
                _songs.add(s);

            } while (cursor.moveToNext());

        }

        cursor.close(); }