2016-11-16 99 views
0

onrequestpermissionsresult方法grantResults [0]总是返回-1 情况下都允许和拒绝请检查下面我的代码: -onrequestpermissionsresult补助结果总是-1

请求的位置的权限: -

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

是应用程序请求权限? –

+0

是应用程序请求权限 –

+0

对于迟来的评论感到抱歉发生此问题是因为我设置了清单权限仅针对 并且在运行时请求Manifest.permission .ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION。 –

回答

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

及其me.Hope工作它可以帮助你。

0

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