android 6.0 动态权限申请

以下代码是对android 6.0敏感权限的动态申请,测试可用。申请权限时,如果已经申请过就跳过申请,已经被拒绝的跳转到app对应的详情界面,由用户手动设置。
 
public class WelcomeActivity extends Activity {
  //需要请求的权限列表
    private final String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_COARSE_LOCATION};
    private final int REQUEST_FINE_LOCATION = 0;//请求码


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setCenterView(R.layout.activity_welcome);
        int ret = PermissionUtils.needRequestPermission(this, permissions, REQUEST_FINE_LOCATION);
        if (ret == PermissionUtils.Request_permission_unneed) {//不需要请求权限或者已授权
            goToNext();
        } else if (PermissionUtils.Request_permission_failurd == ret) {//失败关闭界面
           // playToast(getString(R.string.permission_need));//提示用户
            finish();
        }
    }


    private void goToNext() {
//        做自己想做的事情
    }


    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        switch (requestCode) {
            case REQUEST_FINE_LOCATION:
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0) {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//已授权
                        // The requested permission is granted.
                        goToNext();
                    } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
			//已拒绝,去到应用详情界面,用户手动打开
                      //  playToast(R.string.permissions_setting);//提示用户
                        Intent localIntent = new Intent();
                        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        if (Build.VERSION.SDK_INT >= 9) {
                            localIntent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                            localIntent.setData(Uri.fromParts("package", getPackageName(), null));
//                        } else if (Build.VERSION.SDK_INT <= 8) {
//                            localIntent.setAction(Intent.ACTION_VIEW);
//                            localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
//                            localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
                        }
                        startActivity(localIntent);
                        finish();
                    }
                } else {
                    // The user disallowed the requested permission.
                    //playToast(getString(R.string.permission_need));//提示用户
                    finish();
                }
                break;
        }
    }


}




PermissionUtils 请求工具类代码,参数传Object是想做兼容,如不需要考虑其它,可以直接换成Activity
public class PermissionUtils {
    public static final int Request_permission_unneed = -1;
    public static final int Request_permission_failurd = -2;
    public static int needRequestPermission(Object object, final @NonNull String[] permissions, final int requestCode) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (permissions != null) {
                if (object instanceof Activity) {
                    return requesPermissions((Activity) object, permissions, requestCode);
                } else {
                    return Request_permission_failurd;
                }
            } else {
                return Request_permission_failurd;
            }
        } else {
            return Request_permission_unneed;
        }
    }


    public static int requesPermissions(Activity context, @NonNull String[] permissions, int requestCode) {
        List<String> withoutPermissions = new ArrayList<>();
        //去除已经授权的权限,避免重复请求权限
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(context, permissions[i]) != PackageManager.PERMISSION_GRANTED//未授权
                  /*  && ActivityCompat.shouldShowRequestPermissionRationale(context, permissions[i])*/) {//需要授权
                withoutPermissions.add(permissions[i]);//将未授权的保存下来
            }
        }
        if (withoutPermissions.size() > 0) {
            String[] needPermissions = new String[withoutPermissions.size()];
            withoutPermissions.toArray(needPermissions);
            ActivityCompat.requestPermissions(context, needPermissions, requestCode);
            return requestCode;
        }
        return Request_permission_unneed;
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值