【问题标题】:How to get all music files stored in internal storage and external storage in android using MediaStore?如何使用 MediaStore 获取存储在 android 内部存储和外部存储中的所有音乐文件?
【发布时间】:2017-07-19 08:13:49
【问题描述】:

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

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());

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

musicUri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;

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

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

请帮忙。 谢谢。

【问题讨论】:

    标签: android storage mediastore


    【解决方案1】:

    我认为“外部”这个词令人困惑。它用于寻址内部存储器 扫描过程会将您的所有音乐输入媒体数据库,无论它是在内部还是外部媒体上。(只需确保文件夹中没有隐藏的 .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);
    }
    

    【讨论】:

    • 我正在执行上述相同的步骤,但它没有为我获取所有曲目。:(
    • 您是否使用股票 android 音乐播放器查看所有曲目?
    • 你可以试试我的免费新播放列表管理器。它将显示在媒体数据库中找到了多少曲目。顺便说一句,我假设你的曲目都是 mp3 或 flac。 Android 忽略 .wma 扩展名
    • 你有进步吗?
    【解决方案2】:

    这对我有用。试试这个

     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(); }
    

    【讨论】:

      猜你喜欢
      • 2022-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多