Android6.0没有权限读取外部存储的问题
2016-02-03 16:09
706 查看
最近在做一个电子商城APP,本人负责Android客户端,在项目尾期遇到一个问题,经测试发现,Android6.0以上的手机都没有权限直接读取外部存储,即使在AndroidManifest.xml加上
也没有任何效果,最后查询国外论坛发现6.0以后很多权限都需要主动请求后才能使用,以下为解决方案:
在需要使用的地方类似如下调用即可:
上面代码只是判断了是否授权,如果授权了就执行逻辑,如果没有授权则不执行,那么如果需要监听授权是否成功,则需要重写Activity中的onRequestPermissionsResult函数,如下示例:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
也没有任何效果,最后查询国外论坛发现6.0以后很多权限都需要主动请求后才能使用,以下为解决方案:
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; }
在需要使用的地方类似如下调用即可:
view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(!isGrantExternalRW(getActivity())){ return; } //授权成功后的逻辑 ... } });
上面代码只是判断了是否授权,如果授权了就执行逻辑,如果没有授权则不执行,那么如果需要监听授权是否成功,则需要重写Activity中的onRequestPermissionsResult函数,如下示例:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == PERMISSIONS_CODE) { for (int i = 0; i < permissions.length; i++) { String permission = permissions[i]; int grantResult = grantResults[i]; if (permission.equals(Manifest.permission.READ_EXTERNAL_STORAGE)) { if (grantResult == PackageManager.PERMISSION_GRANTED) { //授权成功后的逻辑 ... } else { requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSIONS_CODE); } } } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析