java - MediaStore 外部内容 URI 正在从 SDCARD 中获取数据

标签 java android android-mediaplayer mediastore

我正在使用 MediaStore 和 Cursor 从指定文件夹中获取音频文件。我想要的是,它应该从手机的内部存储器中获取歌曲列表,但它是从 SDCARD 中获取的。虽然我尝试过使用 INTERNAL_CONTENT_URI 但它根本没有得到任何东西。请看一下,它有什么问题。任何帮助将不胜感激。

    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);
}

最佳答案

例如

     String fullpath = trackcursor.getString(trackcursor.getColumnIndex(MediaStore.Audio.Media.DATA))

if(fullpath.contains(Environment.getExternalStorageDirectory(){
// you have the internal sdcard
} 

在您的代码中:

        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));

                    if(sourceLocation.contains(Environment.getExternalStorageDirectory(){
    // you have the internal sdcard
     AudioInfo audioInfo=new AudioInfo(name,duration,sourceLocation);
                audioInfos.add(audioInfo);
    } 

            }while (cursor.moveToNext());
        }

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

关于java - MediaStore 外部内容 URI 正在从 SDCARD 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49871984/

相关文章:

java - 注册编码器不适用于 Dataflow

java - 在 spring 应用程序中实现自定义验证的最佳方法是什么?

java - 如何保存已选中的 ListView 项目

android - 如何将 SlidingPaneLayout 的 Listview 部分的宽度设置为 100%

android - 应用程序在没有网络连接的情况下意外关闭

java - 在两个 Activity 中加载 'raw' MediaPlayer 资源时出现空点异常

java - 注释或一些自动代码生成来设置默认值以避免 Android/Java 中的 NullPointerExceptions?

java - ontouchlistener 不工作

android java.lang.IllegalStateException MediaPlayer.isPlaying

android - 尝试在空对象上调用接口(interface)方法 'android.media.session.ISessionController android.media.session.ISession.getController()'