【问题标题】:How To get mp3 file list from SdCard with ContentResolver.Query on Android?如何在 Android 上使用 ContentResolver.Query 从 SdCard 获取 mp3 文件列表?
【发布时间】:2014-03-05 03:46:43
【问题描述】:

我在 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 返回 null.. 我已授予写/读权限。我正在制作一个 mp3 播放器,它将在 sdcard 的一个文件夹中播放一些 mp3,路径是正确的,因为我正在将 mp3 下载到这个文件夹并且没有问题。但我不明白为什么查询返回 null ?

我也尝试过类似的东西

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

并提供直接链接,如 mnt/sdcard/Cuzler 或 /mnt/scard/Cuzler

我该如何解决这个问题?

【问题讨论】:

    标签: android android-contentresolver android-cursor


    【解决方案1】:
    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);
    
        }
    }
    

    【讨论】:

    • 在清单文件中你必须添加
    • 与其转储一个大代码块,不如在您的帖子中添加一些 cmets 和解释以供未来读者使用。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2019-03-03
    • 2011-11-17
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多