Android拒绝阅读文件

时间:2016-02-06 07:26:01

标签: android android-permissions

我正在尝试将所有mp3文件加载到数组中,但是android一直显示此错误:java.lang.NullPointerException: Attempt to get length of null array,错误在此行:if(path.isDirectory() && path.listFiles().length > 0)

我将这两个权限行添加到我的清单文件中,但没有效果:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我的函数最初由:locateSongs(Environment.getExternalStorageDirectory());

调用

这是我迭代整个设备的功能:

 private void locateSongs(File path) {
        if(path.isDirectory() && path.listFiles().length > 0){
            File files[] = path.listFiles();
            for(File f : files){
                locateSongs(f.getAbsoluteFile());
            }
        }else if(path.isFile() && path.getName().contains(".mp3")){ // // TODO: 2/5/2016 add more types other than mp3
            MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever();
            metaRetriver.setDataSource(path.getAbsolutePath());

            Song newSong = new Song();
            newSong.setAlbum(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
            newSong.setArtist(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
            newSong.setAuthor(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR));
            newSong.setName(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
            newSong.setBitRate(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
            newSong.setGenre(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE));
            newSong.setDataSourse(path.getAbsolutePath());
            newSong.setDuration(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));

            byte[] art = metaRetriver.getEmbeddedPicture();
            Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length);
            newSong.setImage(songImage);
        }
    }

1 个答案:

答案 0 :(得分:0)

感谢所有试图提供帮助的人,我找到了解决方案,问题是由于使用Android 6.0(Marshmallow)模拟器,问题在这里解决了: http://developer.android.com/training/permissions/requesting.html