android 6.0 安装app后,会自动提示用户是否允许app申请的权限。
如果用户拒绝了则在app中使用某些权限的时候会出现问题。 可怕的是不会报错,没有异常只是操作失败。。。
so so
我们需要在程序中必要的时候判断权限是否存在。
ok
在activity 中申请权限代码如下:
private static int REQUEST_PERMISSION_CODE = 0;
if(!Tools.isPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)){
Log.d(T,"权限缺失"); Tools.requestRermission(this,REQUEST_PERMISSION_CODE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
else{
Log.d(T,"已经存在权限");
}
// 权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
showrocessResult(requestCode,permissions,grantResults);
if (REQUEST_PERMISSION_CODE == requestCode){
if(Tools.permissionsResultAnalysis(grantResults)){
Log.d(T, "申请权限成功");
} else {
Log.d(T, "申请权限失败..");
REQUEST_PERMISSION_CODE++;
}
}
}
//Tools.java 中的方法
// 获取应用是否有某项权限
public static boolean isPermission(Context context, String permissionName)
{
PackageManager pm = context.getPackageManager();
return (PackageManager.PERMISSION_GRANTED == pm.checkPermission(permissionName, context.getPackageName()));
}
public static void requestRermission(Activity context, int requestCode, String... permissionNames)
{
ActivityCompat.requestPermissions( context, permissionNames, requestCode);
}
public static boolean permissionsResultAnalysis(int[] grantResults){
for(int grantResult : grantResults)
if (grantResult != PackageManager.PERMISSION_GRANTED)
return false;
return true;
}
亲测可用。可以在没有权限的时候弹出提示框,提示用户授权。
but …
小米系统的提示似乎有问题。 第一次是能提示的。之后再次申请权限不再提示。