简体   繁体   English

如何在Android上使用ContentResolver.Query从SdCard获取mp3文件列表?

[英]How To get mp3 file list from SdCard with ContentResolver.Query on Android?

I created a folder that's Cuzler in mnt/sdcard and put some mp3 files.. and here codes what I am using.. 我在mnt / sdcard中创建了一个Cuzler文件夹,并放置了一些mp3文件。

File cuzFolder = new File(Environment.getExternalStorageDirectory() + "/Cuzler/");
String storageFolder = cuzFolder.getPath(); 

Uri urlCuz = Uri.parse(storageFolder); 
Log.i(TAG, "CUZ: " + urlCuz.toString());
Cursor cur = mContentResolver.query(urlCuz, null,

MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);
Log.i(TAG, "Query finished. " + (cur == null ? "Returned NULL." : "Returned a cursor."));

cur returns null.. I've given the write/read permissions. cur返回null。我已授予写/读权限。 I am making a mp3 player that will play some mp3s in a folder in sdcard, the path is true because I am downloading mp3s to this folder and no problem. 我正在制作一个mp3播放器,它将在sdcard中的某个文件夹中播放一些mp3,该路径为true,因为我正在将mp3下载到此文件夹,而且没有问题。 But I do not understand why query returns null ? 但是我不明白为什么查询返回null?

I also tried something like 我也尝试过类似的东西

Uri urlCuz = Uri.parse("content://" + storageFolder); 

and gave direct link like mnt/sdcard/Cuzler or /mnt/scard/Cuzler 并给出了直接链接,例如mnt / sdcard / Cuzler或/ mnt / scard / Cuzler

How can I solve this problem? 我怎么解决这个问题?

public class MainActivity extends AppCompatActivity {

    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.list_view);

        ContentResolver resolver = MainActivity.this.getContentResolver();
        ArrayList<String> stringArrayList = new ArrayList<String>();


        String GENRE_ID      = MediaStore.Audio.Genres._ID;
        String GENRE_NAME    = MediaStore.Audio.Genres.NAME;
        String SONG_ID       = android.provider.MediaStore.Audio.Media._ID;
        String SONG_TITLE    = android.provider.MediaStore.Audio.Media.TITLE;
        String SONG_ARTIST   = android.provider.MediaStore.Audio.Media.ARTIST;
        String SONG_ALBUM    = android.provider.MediaStore.Audio.Media.ALBUM;
        String SONG_YEAR     = android.provider.MediaStore.Audio.Media.YEAR;
        String SONG_TRACK_NO = android.provider.MediaStore.Audio.Media.TRACK;
        String SONG_FILEPATH = android.provider.MediaStore.Audio.Media.DATA;
        String SONG_DURATION = android.provider.MediaStore.Audio.Media.DURATION;


        String[] genreColumns = {
               SONG_ID,
                SONG_TITLE
        };

        if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {

            // Should we show an explanation?
            if (shouldShowRequestPermissionRationale(
                    Manifest.permission.READ_EXTERNAL_STORAGE)) {
                // Explain to the user why we need to read the contacts
            }

            requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    1);

            // MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE is an
            // app-defined int constant that should be quite unique

            return;
        }

        Cursor cursor = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,genreColumns,null,null,null);
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())
//            genreIdToGenreNameMap.put(cursor.getString(0), cursor.getString(1));
             stringArrayList.add(cursor.getString(1));

        cursor.close();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,stringArrayList);
        listView.setAdapter(adapter);

    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM