Android Studio 如何从设备与MediaStore的所有音频文件

pjngdqdw  于 2023-01-31  发布在  Android
关注(0)|答案(2)|浏览(220)

我正试图从设备内部存储中获取所有媒体文件。我使用MediaStore检索它,但它只返回一首歌。
请我想它返回所有歌曲在内部存储,但它只返回一首歌,请帮我检查问题出在哪里。
下面是我的代码主活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ListView audioView = (ListView) findViewById(R.id.songView);

    ArrayList<String> audioList = new ArrayList<>();

    String[] proj = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DISPLAY_NAME };// Can include more data for more details and check it.

    Cursor audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, proj, null, null, null);

    if(audioCursor != null){
        if(audioCursor.moveToFirst()){
            do{
                int audioIndex = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);

                audioList.add(audioCursor.getString(audioIndex));
            }while(audioCursor.moveToNext());
        }
    }
    audioCursor.close();

    ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,android.R.id.text1, audioList);
    audioView.setAdapter(adapter);

}

}`

ipakzgxi

ipakzgxi1#

你可以这样试试。

  • 首先添加这两个权限清单并给予编程方式
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  • 对于Android 13或更高版本,您只需要一个音频权限
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
  • 并获得所有音频像这样
ArrayList<String> audioLists = new ArrayList<>();

     String[] strings = {MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME};// Can include more data for more details and check it.

     Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, strings, null, null, null);

     if (cursor != null) {
         if (cursor.moveToFirst()) {
             do {
                 int audioIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);

                 audioLists.add(cursor.getString(audioIndex));
             } while (cursor.moveToNext());
         }
     }
     cursor.close();

 for (int i = 0 ; i < audioLists.size(); i++ ){
     Log.e("audioListss" ,"Audio Path ---->>>  " + audioLists.get(i));
 }
  • 我得到所有音频见下文

hlswsv35

hlswsv352#

哇,它现在的工作,问题是位于光标audioCursor = getContentResolver(). query(MediaStore. Audio. Media. INTERNAL_CONTENT_URI,项目,空,空,空);我将getContentResolver查询更改为INTERNAL_CONTENT_URI,因为我的设备上没有SD卡。
谢谢大家的支持。

相关问题