有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java游标getContentResolver()。query MediaStore未获取最新添加的音频文件

我正在使用MediaStore和Cursor从指定文件夹获取音频文件。我想要的是,它应该从手机的内部存储中获取最新的歌曲列表,但不获取最新的文件

例如:我正在录制音频,然后将其保存在特定文件夹中。但当我在应用程序的播放列表中看到。这不是他们的礼物。尽管文件已成功保存在我的内部存储器中

我也调试过了。getCount也不会返回更新的计数数

String AudioFilePath = "%" +"/nexcox/voicerecorder/audio/" +"%";

Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection= MediaStore.Audio.Media.DATA +" LIKE ? ";
Cursor cursor=context.getContentResolver().query(uri,null,selection,
        new String[]{AudioFilePath},
        null);


if (cursor!=null){
    if (cursor.moveToFirst()){
        do {
            String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
            String duration = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
            String sourceLocation = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

            AudioInfo audioInfo=new AudioInfo(name,duration,sourceLocation);
            audioInfos.add(audioInfo);
        }while (cursor.moveToNext());
    }

    cursor.close();
    audioAdapter=new AudioAdapter(context,audioInfos);

    recyclerView.setAdapter(audioAdapter);
}

enter image description here


共 (2) 个答案

  1. # 1 楼答案

    可以这样做:

    String[] projection = { MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DISPLAY_NAME}; 
    Cursor myCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection , null, null, null);
    
           if(myCursor != null){
               if(myCursor .moveToFirst()){
                   do{
                       int audioIndex = myCursor .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
    
                       audioList.add(myCursor .getString(audioIndex));
                   }while(myCursor .moveToNext());
               }
           }
           myCursor .close();
    
  2. # 2 楼答案

    最后,我找到了解决办法。我的音频文件没有显示在recycler视图中的原因是,当我录制音频并将其保存到指定路径时,虽然它保存在该位置,但MediaStore。音频媒体外部内容URI不知道我刚刚保存的文件是音频媒体。所以为了告诉MediaStore。音频媒体外部内容,在停止mediaRecorder时添加了以下代码

            ContentValues values = new ContentValues(4);
            long current = System.currentTimeMillis();
            values.put(MediaStore.Audio.Media.TITLE, "audio file");
            values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
            values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
            values.put(MediaStore.Audio.Media.DATA, AudioFilePath);
            ContentResolver contentResolver = context.getContentResolver();
            // Construct uris
            Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            Uri newUri = contentResolver.insert(base, values);
    

    添加之后,我的音频文件也开始出现在我的recyclerview中。 很有魅力