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

android 6.0 Runtime Permissions Check

2015-11-05 22:23 323 查看

Android 6.0 release

Android6.0 早已经发布了,可以立马更新了。可喜的是现在更新sdk冒失不需要翻墙了而且速度非常快。

new Feature

运行时期的权限检查,意味着用户可以直接管理app想要获取的权限。所以在6.0及以上的版本每次我们在调用需要权限的api的时候都要进行检查用户是否已经授权了。

通用的写法是这样的:

@Override
public void onClick(View v) {
//如果是Android 6.0 就必须进行运行时的权限检查
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M) {

/**检查app时候已经获得授权了
* checkSelfPermission(permission)
* 参数 :表示要检查的权限
*
* 返回值: PackageManager.PERMISSION_GRANTED(已经授权) or
*        PackageManager.PERMISSION_DENIED (未授权)
*/
if(checkSelfPermission(Manifest.permission.READ_CONTACTS)== PackageManager.PERMISSION_GRANTED){
// doSth
Toast.makeText(this,"用户已经授权了",Toast.LENGTH_SHORT).show();
}else{
//是否可以现用户展现授权信息ui
if(shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)){
Toast.makeText(this,"需要您的授权",Toast.LENGTH_SHORT).show();
}
//请求授期 可以批量的申请
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},100);
}
}else{
// doSth
Toast.makeText(this,"6.0以下不需要检查",Toast.LENGTH_LONG).show();
}
}


调用 requestPermissions 方法之后会调用以下回调方法:

//授期请求返回和 onActivityResult 类似
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if(requestCode==100){
boolean isAvaiable=true;
//判断申请的权限是否都已经获得授权(可以批量申请)
for (int isGrant:grantResults){
if(isGrant!=PackageManager.PERMISSION_GRANTED){
isAvaiable =false;
break;
}
}
if(isAvaiable){
Toast.makeText(this,"授权成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"授权失败",Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: