您的位置:首页 > 移动开发 > Android开发

android6.0以上不能读取外部存储权限问题

2016-12-25 22:47 453 查看
通过内容提供者获取手机sdcard本地视频时,

/**
* 从本地的sdcard得到数据
* //1.遍历sdcard,后缀名
* //2.从内容提供者里面获取视频
* //3.如果是6.0的系统,动态获取读取sdcard的权限
*/
private void getDataFromLocal() {

new Thread(){
@Override
public void run() {
super.run();

//                isGrantExternalRW((Activity) context);
//                SystemClock.sleep(2000);
mediaItems = new ArrayList<>();
ContentResolver resolver = context.getContentResolver();
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] objs = {
MediaStore.Video.Media.DISPLAY_NAME,//视频文件在sdcard的名称
MediaStore.Video.Media.DURATION,//视频总时长
MediaStore.Video.Media.SIZE,//视频的文件大小
MediaStore.Video.Media.DATA,//视频的绝对地址
MediaStore.Video.Media.ARTIST,//歌曲的演唱者

};
Cursor cursor = resolver.query(uri, objs, null, null, null);
if(cursor != null){
while (cursor.moveToNext()){

MediaItem mediaItem = new MediaItem();

mediaItems.add(mediaItem);//写在上面

String name = cursor.getString(0);//视频的名称
mediaItem.setName(name);

long duration = cursor.getLong(1);//视频的时长
mediaItem.setDuration(duration);

long size = cursor.getLong(2);//视频的文件大小
mediaItem.setSize(size);

String data = cursor.getString(3);//视频的播放地址
mediaItem.setData(data);

String artist = cursor.getString(4);//艺术家
mediaItem.setArtist(artist);

}

cursor.close();

}

//Handler发消息
handler.sendEmptyMessage(10);

}
}.start();

}

/**
* 解决安卓6.0以上版本不能读取外部存储权限的问题
* @param activity
* @return
*/
public static boolean isGrantExternalRW(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && activity.checkSelfPermission(
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

activity.requestPermissions(new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1);

return false;
}

return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 6-0动态权限