【问题标题】:How to show different dialog messages for different Permissions?如何为不同的权限显示不同的对话框消息?
【发布时间】:2017-10-25 05:01:53
【问题描述】:

我在我的项目中实现了运行时权限,主要是 READ_PHONE_STATE、READ_CONTACTS、GET_ACCOUNTS。假设用户拒绝了 3 个中的 2 个,那么我必须显示有关每个拒绝权限的单个对话框消息。我该怎么做

代码:-

PermissionManager.with(this)
            .key(2100)
            .permission(PermissionEnum.READ_PHONE_STATE, PermissionEnum.READ_CONTACTS, PermissionEnum.GET_ACCOUNTS, PermissionEnum.READ_SMS, PermissionEnum.ACCESS_FINE_LOCATION, PermissionEnum.ACCESS_COARSE_LOCATION, PermissionEnum.WRITE_EXTERNAL_STORAGE, PermissionEnum.READ_EXTERNAL_STORAGE)
            .askAgain(true)
            .askAgainCallback(new AskAgainCallback() {
                /*Callback to handle denied permission response*/
                @Override
                public void showRequestPermission(UserResponse response) {
                    showDialog(response);
                }
            })
            .callback(new SmartCallback() {
                /* To handle the result of permissions after all successful/ unsuccessful user transactions*/
                @Override
                public void result(boolean allPermissionsGranted, boolean somePermissionsDeniedForever) {
                    if (allPermissionsGranted) {
                        init();
                    } else {
                        finish();
                    }
                }
            })
            .ask();

显示对话框:-

private void showDialog(final AskAgainCallback.UserResponse response) {
    new AlertDialog.Builder(Splash.this)
            .setTitle("Permission needed")
            .setMessage("This app really need to use these permissions, do you want to authorize it?")
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    response.result(true);
                }
            })
            .setNegativeButton("NOT NOW", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    response.result(false);
                    finish();
                }
            })
            .setCancelable(false)
            .show();
}

但需要在对话框中为每个被拒绝的权限显示一条消息。

【问题讨论】:

  • 您似乎正在使用库来管理权限。您应该询问 lib 的作者,因为他们将能够提供更好的帮助。

标签: android permissions runtime


【解决方案1】:
  1. 字符串权限数组

final String[] permisions = {Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION};
  1. 请求权限

 ActivityCompat.requestPermissions(this, permisions, Permissions_Request_Code);

3 . @Override 方法

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
  1. InSide onRequestPermissionsResult 你会得到 grantResults 数组

@Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    switch (requestCode) { // RequestCode for our Permissions
        case Permissions_Request_Code:
            if (grantResults.length != 0) { // Check Granted Results Not Null
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted for Manifest.permission.ACCESS_FINE_LOCATION

                    // DO What You Want
                } else// Permission Denied for Manifest.permission.ACCESS_FINE_LOCATION
                {
                    // Display Error Dialog
                }
                if (grantResults[1] == PackageManager.PERMISSION_GRANTED) {// Permission Granted for Manifest.permission.ACCESS_COARSE_LOCATION
                    // DO What You Want
                } else // Permission Denied for Manifest.permission.ACCESS_COARSE_LOCATION
                {
                    // Display Error Dialog
                }
            }
            break;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多