Android 6.0中怎么动态申请权限,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
目前创新互联已为上千余家的企业提供了网站建设、域名、雅安服务器托管、网站托管、服务器托管、企业网站设计、宁都网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
系统权限分为2种:
Normal permission:对于用户隐私没有危险的,在清单文件中申请就可以直接授权。
Dangerous permission:app需要访问用户的隐私信息等,即使在清单文件注册,也需要在运行是通过用户授权。
Dangerous permission需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了。
group:android.permission-group.CONTACTS
permission:android.permission.WRITE_CONTACTS
permission:android.permission.GET_ACCOUNTS
permission:android.permission.READ_CONTACTS
group:android.permission-group.PHONE
permission:android.permission.READ_CALL_LOG
permission:android.permission.READ_PHONE_STATE
permission:android.permission.CALL_PHONE
permission:android.permission.WRITE_CALL_LOG
permission:android.permission.USE_SIP
permission:android.permission.PROCESS_OUTGOING_CALLS
permission:com.android.voicemail.permission.ADD_VOICEMAIL
group:android.permission-group.CALENDAR
permission:android.permission.READ_CALENDAR
permission:android.permission.WRITE_CALENDAR
group:android.permission-group.CAMERA
permission:android.permission.CAMERA
group:android.permission-group.SENSORS
permission:android.permission.BODY_SENSORS
group:android.permission-group.LOCATION
permission:android.permission.ACCESS_FINE_LOCATION
permission:android.permission.ACCESS_COARSE_LOCATION
group:android.permission-group.STORAGE
permission:android.permission.READ_EXTERNAL_STORAGE
permission:android.permission.WRITE_EXTERNAL_STORAGE
group:android.permission-group.MICROPHONE
permission:android.permission.RECORD_AUDIO
group:android.permission-group.SMS
permission:android.permission.READ_SMS
permission:android.permission.RECEIVE_WAP_PUSH
permission:android.permission.RECEIVE_MMS
permission:android.permission.RECEIVE_SMS
permission:android.permission.SEND_SMS
permission:android.permission.READ_CELL_BROADCASTS
申请权限核心代码
/**
* android 6.0 以上需要动态申请权限
*/
private void initPermission() {
//定义动态申请的权限组
String permissions[] = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.READ_PHONE_STATE };
ArrayList
//遍历要申请的权限组里的每个权限是否已经获取到权限了
//如果未获取到权限加入到toApplyList列表里用于动态申请
for (String perm : permissions) {
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
// 进入到这里代表没有权限.
}
}
//判断是否有需要动态申请的权限用requestPermissions进行申请
if (toApplyList.size() > 0) {
String tmpList[] = new String[toApplyList.size()];
if (!toApplyList.isEmpty()) {
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
}
} else {
//如果没有需要动态申请的权限直接进入我们要做的事件
InitVoice();
}
}
同时要在activity里面重写一下onRequestPermissionsResult方法,用于获取到后权限的动作.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 此处为android 6.0以上动态授权的回调,用户自行实现。
for (String perm : permissions) {
//得到申请权限的返回结果,如果未获取到权限直接关闭当前activity
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
finish();
}
}
//申请到权限后执行我们要做的事件
InitVoice();
}
在activity的onCreate事件加入权限申请的调用
try {
final PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0);
int targetSdkVersion = info.applicationInfo.targetSdkVersion;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (targetSdkVersion >= Build.VERSION_CODES.M) {
initPermission();
}
}else {
InitVoice();
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
关于Android 6.0中怎么动态申请权限问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
标题名称:Android6.0中怎么动态申请权限
文章位置:http://lswzjz.com/article/ipihhe.html