【问题标题】:onrequestpermissionsresult grant results always -1onrequestpermissionsresult 授予结果总是 -1
【发布时间】:2017-03-30 07:58:05
【问题描述】:

onrequestpermissionsresult 方法 grantResults[0] 总是返回 -1 in 大小写允许和拒绝请检查下面的代码:-

请求位置许可:-

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                int hasReadStatePermission = getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
                if (hasReadStatePermission != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION}, Constants.RequestCode.KEY_PERMISSION_ACCESS_FINE_LOCATION);
                }else {
                    setLocation();
                }
            }else {
                DialogUtils.dialogTwoButton(getActivity(), "Allow", "Deny", getString(R.string.msg_get_gps_access), new Runnable() {
                    @Override
                    public void run() {
                        setLocation();
                    }
                }, new Runnable() {
                    @Override
                    public void run() {
                        Intent intent=new Intent(getActivity(), ChangeLocationManualyActivity.class);
                        startActivityForResult(intent,Constants.RequestCode.LOCATION_CHANGE);
                    }
                });

PackageManager.PERMISSION_GRANTED=0, PackageManager.PERMISSION_DENIED=-1的权限回调方法

  @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if(requestCode==Constants.RequestCode.KEY_PERMISSION_ACCESS_FINE_LOCATION)
            if(grantResults.length>0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                setLocation();
            }else{
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent=new Intent(getActivity(), ChangeLocationManualyActivity.class);
                        startActivityForResult(intent,Constants.RequestCode.LOCATION_CHANGE);
                    }
                },3000);
            }
    }

【问题讨论】:

  • 应用是否在请求权限??
  • 是请求权限的应用
  • 对不起,迟到的评论问题发生了,因为我只为 和 Manifest.permission 的运行时请求设置了清单权限.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION。

标签: android


【解决方案1】:

请检查以下代码:-

  public static boolean selfPermissionGranted(Context context, String permission) {
        // For Android < Android M, self permissions are always granted.
        boolean result = true;
        int targetSdkVersion;
        try {
            final PackageInfo info = context.getPackageManager().getPackageInfo(
                    context.getPackageName(), 0);
            targetSdkVersion = info.applicationInfo.targetSdkVersion;
        } catch (PackageManager.NameNotFoundException e) {
            targetSdkVersion = 21;
            e.printStackTrace();
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            if (targetSdkVersion >= Build.VERSION_CODES.M) {
                // targetSdkVersion >= Android M, we can
                // use Context#checkSelfPermission
                result = context.checkSelfPermission(permission)
                        == PackageManager.PERMISSION_GRANTED;
            } else {
                // targetSdkVersion < Android M, we have to use PermissionChecker
                result = PermissionChecker.checkSelfPermission(context, permission)
                        == PermissionChecker.PERMISSION_GRANTED;
            }
        }

        System.out.println("Result is==>" + result);
        return result;
    }

拨打电话如下:-

if (!selfPermissionGranted(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        PERMISSION_ACCESS_COARSE_LOCATION);
}

它对我有用。希望它对你有所帮助。

【讨论】:

    【解决方案2】:

    检查grantResults[1] 而不是grantResults[0]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2019-09-26
      相关资源
      最近更新 更多