繁体   English   中英

如何从 android 的内部存储中获取 .mp3 文件

[英]how to fetch .mp3 files from internal storage in android

我想从内部存储中获取 .mp3 文件,这里是 for 循环

public ArrayList<File> findsong(File file){
        ArrayList<File> arrayList = new ArrayList<>();
        File[] files = file.listFiles();
        for (File singleFiles: files){
            if (singleFiles.isDirectory() && !singleFiles.isHidden()){
                arrayList.addAll(findsong(singleFiles));
            }else {
                if (singleFiles.getName().endsWith(".mp3")){
                    arrayList.add(singleFiles);
                }
            }
        }
        return arrayList;
    } 

但是我遇到了 null 指针错误

java.lang.NullPointerException: Attempt to get length of null array

这是我的完整代码

我想做什么的上下文:我想显示来自内部/外部存储的音频文件列表,因为我是 android 开发的新手,我被困在这里,帮助会很大

提前致谢

ListView myListViewForSongs;
    String[] items;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        runtimePermission();
        myListViewForSongs= (ListView) findViewById(R.id.listView);
    }
    public void runtimePermission(){
        Dexter.withContext(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE).withListener(new PermissionListener() {
            @Override
            public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                display();
            }

            @Override
            public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {

            }

            @Override
            public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
                permissionToken.continuePermissionRequest();
            }
        }).check();
    }
    public ArrayList<File> findsong(File file){
        ArrayList<File> arrayList = new ArrayList<>();
        File[] files = file.listFiles();
        assert files != null;
        for (File singleFiles: files){
            if (singleFiles.isDirectory() && !singleFiles.isHidden()){
                arrayList.addAll(findsong(singleFiles));
            }else {
                if (singleFiles.getName().endsWith(".mp3")){
                    arrayList.add(singleFiles);
                }
            }
        }
        return arrayList;
    }
    void display(){
        final ArrayList<File> mySongs=findsong(new File(Environment.getExternalStorageState()));
        items = new String[mySongs.size()];
        for (int i=0;i<mySongs.size();i++){
            items[i]= mySongs.get(i).getName().replace(".mp3","");
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);
        myListViewForSongs.setAdapter(adapter);
    }
}

您应该使用内容提供商从内部存储中获取歌曲。

我已使用MediaStore成功获取音频文件

代码

    String[] proj = {
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.DATA....

然后将它们设置为ArrayAdapter<>

暂无
暂无

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

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