内容解析器查询未在 SD 卡上找到音乐

Content Resolver Query is not finding music on sd-card

我构建了一个简单的查询来查找 Android 模拟器的 SD 卡上的音乐。我正在使用 Android Studio。我使用 adb push 在 sdcard 上放置了 3 首歌曲。但是,查询未找到音乐文件。这是 SD 卡上 Music 文件夹中文件的图像:

这是我用来执行查询的代码:

    ContentResolver musicResolver = getContentResolver();
    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

    // Now we can iterate over the results, first checking that we have valid data:
    if(musicCursor!=null && musicCursor.moveToFirst()){

        // We first retrieve the column indexes for the data items that we are interested in for each song
        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);

        // then we use these to create a new Song object and add it to the list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            String thisArtist = musicCursor.getString(artistColumn);
            allSongsPlaylist.add(new Song(thisId, thisTitle, thisArtist));
        }
        while (musicCursor.moveToNext());
    }

musicCursor 不为空,但 musicCursor.moveToNext() returns 0.

我做错了什么?音乐文件显然在 sdcard 上,但查询看不到它们。如果我将内容 URI 更改为 INTERNAL_CONTENT_URI,查询将查找内部存储中的文件(例如压电警报),而不是我的音乐文件。

What am I doing wrong?

如果我不得不猜测,您假设 MediaStore 知道这些文件。

MediaStore,就其本身而言,偶尔只会索引外部存储。它不知道您通过 adb.

推送到那里的文件

对于轻量级测试,请从 Play 商店中获取一个可触发重新索引回合的应用程序。我曾经使用 this app, but apparently it does not support Android 4.4+. There are plenty of others, like this one,这可能对你有用。或者,等一天,明天再试你的测试,到时候它们可能会自动被提取。

以编程方式将文件写入外部存储的开发人员应使用 MediaScannerConnectionscanFile() 来获取由 MediaStore 索引的文件。