写了段代码, 无论如何无法正常执行:
File dir = Environment.getExternalStorageDirectory(); ... File[] children = dir.listFiles(); // children取出来是null
然后加了判断, 发现dir不可读:
File dir = Environment.getExternalStorageDirectory(); ... if (dir.canRead()) { // dir不可读 File[] children = dir.listFiles(); ... }
难道是没有在manifest注册权限? 不, 明明有WRITE_EXTERNAL_STORAGE...
然后放弃思考玩了局游戏, 回来想通了——这机器是Android 6.0版本, 除了manifest的权限, 还有个运行时权限(Requesting Permissions at Run Time). // 玩游戏果然醒脑
直接用代码说话:
1. 检查是否已经被赋予了相应的权限:
int result = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); // 这是Context的方法
注意result是个int值, 从PackageManager.PERMISSION_GRANTED和PackageManager.PERMISSION_DENIED中取值.
2. 若未获取权限, 则申请权限:
final String[] permissionsToRequest = { Manifest.permission.WRITE_EXTERNAL_STORAGE }; final int requestCode = 0; requestPermissions(permissionsToRequest, requestCode); // 这是Activity的方法
上述代码执行后, 系统会弹出Dialog, 提示用户查看权限申请.
3. 用户操作完毕, 以下Activity方法将被回调:
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)
在其中, 针对requestCode处理好即可.
4. 补充:
官方文档推荐在申请权限前, 考虑是否需要针对权限申请, 向用户作出说明(比如说本游戏为毛要读您的联系人). 同时Activity提供了这个接口的原型:
public boolean shouldShowRequestPermissionRationale (String permission)
相关推荐
Android M(Android 6.0)运行时权限开发详细解析,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/72190357
Android6.0运行时权限处理demo
Android 6.0运行时权限Demo
关于Android6.0运行时权限demo,包括未封装原生API申请权限,封装权限工具类,使用权限工具类在Activity和Fragment中申请权限。
Android6.0运行时权限
Android 6.0运行时权限处理与封装(一)博客地址: http://blog.csdn.net/jsonnan/article/details/74573972
Android 6.0运行时权限
Android6.0运行时权限申请
Android6.0运行时权限(基于RxPermission开源库)Demo
android 6.0运行时权限工具类,简单易用,可以回调权限全部授权、权限被拒绝、全选被勾选不在提示3个用户操作。
android 6.0运行时权限的简单封装的方法,欢迎学习交流
Android 6.0 运行时权限批量处理 开发中用到的例子 以后用得到
实现工具Android studio ,Android 6.0在我们原有的AndroidManifest.xml声明权限的基础上,又新增了运行时权限动态检测,以下权限都需要在运行时判断:身体传感器、日历、摄像头、通讯录、地理位置、麦克风、电话、...
Android6.0运行权限封装,轻轻松松一句代码实现,并添加了同意及拒绝授权时的监听回调,方便添加操作
andriod 6.0以上 权限检查 封装代码 andriod 6.0以上 权限检查 封装代码 andriod 6.0以上 权限检查 封装代码
Android 6.0 权限 动态注册权限 一次请求多个权限。非第三方库,源码。
一个Android 6.0运行时权限的处理,具体效果请看这里http://blog.csdn.net/z240336124/article/details/53130207
安卓平台权限一直有被流氓应用随便利用诟病, android M的发布彻底解决了这一问题,取而代之的是,app不得不在运行时一个一个询问用户授予权限。
这是兼容6.0权限处理的一套框架,具体效果及实现请看这里:http://blog.csdn.net/z240336124/article/details/53174400