2016-08-18 81 views
0

我用下面的代码来检查权限:获准应用于应用程序时,它重新启动

if (getActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) 
          != PackageManager.PERMISSION_GRANTED || getActivity().checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || 
          getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) 
            != PackageManager.PERMISSION_GRANTED) { 
         requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, 
             Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION}, 
           MY_PERMISSIONS); 
        } 

而且贝娄代码我赶上结果:

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

     if(requestCode == MY_PERMISSIONS){ 
      if(grantResults[0] != PackageManager.PERMISSION_GRANTED || 
        grantResults[1] != PackageManager.PERMISSION_GRANTED){ 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setMessage(R.string.per_check_m); 
       builder.setCancelable(false); 
       builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
          requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, 
              Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION}, 
            MY_PERMISSIONS); 
         } 
        } 
       }); 
       builder.show(); 
      }else { 
       startActivityForResult(com.media_iran.android.iranama.Utils.ImagePicker.getPickImageIntent(getActivity()), INTENT_REQUEST_GET_IMAGES); 
      } 
     } 

    } 

但是,当用户接受的权限,这不是”无需工作,需要重新启动应用程序,并从应用程序历史记录中清除它以获取工作权限。

我发现它是android中的一个错误,但这样其他应用程序如何工作? 有没有解决方法?

回答

0

请尝试下面的代码,这对我来说很完美。 在OnCreate中插入下面的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      int hasWriteContactsPermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CONTACTS); 
      if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) { 
       requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
         REQUEST_CODE_ASK_PERMISSIONS); 
      } 
     } 

覆盖onRequestPermissionResult:

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     switch (requestCode) { 
      case REQUEST_CODE_ASK_PERMISSIONS: 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // Permission Granted add code when permission granted. 
        signIn(); 
       } else { 
        // Permission Denied 
        Toast.makeText(MainActivity.this, "Permission Denied.", Toast.LENGTH_SHORT).show(); 
       } 
       break; 
      default: 
       super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 
0

把你onRequestPermissionsResult()您的活动。

onRequestPermissionsResult()在您的片段中的活动中被调用。

+0

我在包含片段的活动上尝试过,但不能再次运行 – Ali

+0

我在FragmentActivity中尝试过,而不是在活动 – Ali

+0

'requestPermissions()'在您的片段上,但onRequestPermissionsResult()代码应该在您的活动中。 –