onrequestpermissionsresult授予结果始终为-1 [英] onrequestpermissionsresult grant results always -1

查看:153
本文介绍了onrequestpermissionsresult授予结果始终为-1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

onrequestpermissionsresult方法GrantResults [0]始终在返回-1两种情况都允许和拒绝,请在下面检查我的代码:-

onrequestpermissionsresult method grantResults[0] always return -1 in both case allow and deny please check my code below:-

请求位置权限:-

    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

Permission callback method where 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);
            }
    }

推荐答案

请检查以下代码:-

  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);
}

它为我工作.希望它对您有帮助.

Its worked for me.Hope it helps you.

这篇关于onrequestpermissionsresult授予结果始终为-1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆