Android 内容解析程序查询未在sd卡上找到音乐

Android 内容解析程序查询未在sd卡上找到音乐,android,android-emulator,android-contentprovider,android-sdcard,android-contentresolver,Android,Android Emulator,Android Contentprovider,Android Sdcard,Android Contentresolver,我构造了一个简单的查询来查找Android emulator SD卡上的音乐。我正在使用Android Studio。我使用adb push在SD卡上放置了3首歌曲。但是,查询没有找到音乐文件。以下是SD卡上音乐文件夹中文件的图像: 下面是我用来执行查询的代码: ContentResolver musicResolver = getContentResolver(); Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_

我构造了一个简单的查询来查找Android emulator SD卡上的音乐。我正在使用Android Studio。我使用adb push在SD卡上放置了3首歌曲。但是,查询没有找到音乐文件。以下是SD卡上音乐文件夹中文件的图像:

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

    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不为null,但musicCursor.moveToNext()返回0

我做错了什么?音乐文件显然在SD卡上,但查询没有看到它们。如果我将内容URI更改为INTERNAL_content_URI,则查询将查找内部存储器中的文件(例如piezo alarm),而不是我的音乐文件

我做错了什么

如果非要我猜的话,您是假设
MediaStore
知道这些文件

MediaStore
,仅偶尔对外部存储进行索引。它不知道您通过adb推送到那里的文件

对于轻量级测试,请从Play Store中获取一个应用程序,该应用程序将触发一轮重新索引。我以前用过,但显然它不支持Android 4.4+。还有很多其他的,比如,可能对你有用。或者,等一天,明天再试试你的测试,到时候它们可能会自动被接受


以编程方式将文件写入外部存储的开发人员应使用
MediaScannerConnection
scanFile()
将这些文件编入
MediaStore

的索引实际上,这些文件已在前一天推送到sd卡上。但是你的回答让我决定退出模拟器并重新加载它。这似乎奏效了。我总是不愿意退出emulator,因为重新加载要花很长时间。代码现在正在识别这些文件。谢谢