2016-08-18 35 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()代碼應該在您的活動中。 –