分析三方权限申请源码时,发现不错的逻辑,做个记录:             

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                    .setData(Uri.fromParts("package", getPackageName(), null));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

                  

可以结合权限申请使用上面的方法:

public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 10000){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(MainActivity.this,"同意",0).show();
            } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
                boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0]);
                if (!showRationale) {
                    //拒绝后,点击"不在显示"
                    new AppSettingsDialog.Builder(this).build().show();
                    Toast.makeText(MainActivity.this,"打开设置页面",0).show();
                }else{
                    //提示用户
                }
                //showRationale 值说明
                //1,没有申请过权限,申请就是了,所以返回false;
                // 2,申请了用户拒绝了,那你就要提示用户了,所以返回true;
                // 3,用户选择了拒绝并且不再提示,那你也不要申请了,也不要提示用户了,所以返回false;
                // 4,已经允许了,不需要申请也不需要提示,所以返回false;
            }
        }
        
    }

 

发现一些博客总结的也挺全:

https://blog.csdn.net/mahongy/article/details/94549550

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐