内容解析器查询无法在SD卡上查找音乐

时间:2015-04-19 22:43:35

标签: android android-emulator android-contentprovider android-sdcard android-contentresolver

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

enter image description here

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

    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,则查询将查找内部存储中的文件(例如压电警报),而不是我的音乐文件。

1 个答案:

答案 0 :(得分:3)

  

我做错了什么?

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

MediaStore本身只会偶尔为外部存储编制索引。它不了解您通过 adb 推送的文件。

对于轻量级测试,请从Play商店中获取一个触发重建索引的应用。我以前使用this app,但显然它不支持Android 4.4+。还有很多其他的,如this one,可能对你有用。或者,等一天,明天再次尝试测试,然后它们可能会被自动拾取。

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