运行时权限
来源:互联网 发布:南昌软件测试培训 编辑:程序博客网 时间:2024/06/14 03:15
为了进一步保护用户的安全和隐私,安卓从6.0版本推出了将权限一分为二,分为普通权限和危险权限。6.0以下依然是在安装时列出所有权限,用户同意后就开始安装,所有权限即为同意。而6.0以后危险权限默认用户没有授权,所以我们在使用这些危险权限前需要得到用户的授权,用户同意后才能继续提供服务。
1.先看看哪些是危险权限。共9组24个
CALENDAR
READ_CALENDAR
WRITE_CALENDAR
CAMERA
CAMERA
CONTACTS
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATION
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONE
RECORD_AUDIO
PHONE
READ_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORS
BODY_SENSORS
SMS
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
2.判断是否已授权:
if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)checkSelfPermission返回一个int数,可以与后面这个值比较,相等说明已经授权。这行代码判断ACCESS_FINE_LOCATION授权与否。
3.发出权限请求并得到用户选择:
发出权限请求:
ActivityCompat.requestPermissions(MainActivity.this,array,1);
这个请求的一个参数是一个字符串数组,是权限数组,也就是每次可以发出多个权限的请求。
返回的结果在下面的方法中:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 1: if (grantResults.length>0){ for (int permit:grantResults){ if (permit!=PackageManager.PERMISSION_GRANTED){ Toast.makeText(MainActivity.this,"请同意所有权限",Toast.LENGTH_SHORT).show(); return; } } locate(); } break; } }第一个参数结果码,为1说明正常,第二个是权限数组,第三个是结果数组,Int类型,我对这个数组进行遍历,如上所说与PackageManager.PERMISSION_GRANTED这个值进行比较确定用户是否对相应权限进行了授权。
4.多个要求权限的处理技巧:用一个list,判断每一个权限把没有授权的加入list,然后转成数组进行请求:
List<String> permissions=new ArrayList<>(); if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ permissions.add(android.Manifest.permission.ACCESS_FINE_LOCATION); } if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_PHONE_STATE) !=PackageManager.PERMISSION_GRANTED){ permissions.add(android.Manifest.permission.READ_PHONE_STATE); } if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) !=PackageManager.PERMISSION_GRANTED){ permissions.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (!permissions.isEmpty()){ String[] array=permissions.toArray(new String[permissions.size()]); ActivityCompat.requestPermissions(MainActivity.this,array,1); } else { locate();//已经同意所有权限 }
0 0
- 运行时权限管理
- 6.0运行时权限
- Android 运行时权限
- 运行时权限相关
- AndPermission 运行时权限
- 运行时权限
- android运行时权限
- 运行时权限
- Android运行时权限
- Android 运行时权限
- 运行时权限
- 运行时权限
- android运行时权限
- 6.0运行时权限
- android运行时权限
- 6.0运行时权限
- 运行时权限
- 运行时权限
- c++ new delete new[] delete[] 底层实现
- bash中的for循环
- JS生成随机的由字母数字组合的字符串
- Nginx+Tomcat负载均衡配置
- 正则匹配校验身份证、手机号、邮箱
- 运行时权限
- 欢迎使用CSDN-markdown编辑器
- scipy.optimize.minimize 的优化算法(2): Powell
- Hyperledger Fabric处理Peer与Peer之间通信的源码解析
- 关于solr
- Streaming
- return false误区onclick|submit=fn(return false)不能阻止默认行为
- 优达学城安卓开发(初级 项目:sunshine) 分课时树状图-第四课生命周期与数据库
- Objective-C 【Method Swizzle】