2017-03-03 5 views
0

選択者の選択内容に基づいてユーザのパーミッションをリクエストするのに問題があります。今のところ、私のプログラムは、選択者の意図が表示される前に許可を要求しています。インテントを選択した後、パーミッションを要求する方法でどのように達成できますか。以下のコードは、カメラの許可または保存の許可を最初に要求した後、カメラまたはギャラリーから写真を撮ることをユーザーに選択させるだけです。Android選択肢インテントのユーザアクションに基づいてパーミッションをリクエストする方法

Dexter.checkPermissions(new MultiplePermissionsListener() { 

       Intent chooserIntent = null; 
       List<Intent> intentList = new ArrayList<>(); 

       Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

       @Override 
       public void onPermissionsChecked(MultiplePermissionsReport report) { 

        List<PermissionGrantedResponse> list_GrantedPermission; 

        list_GrantedPermission = report.getGrantedPermissionResponses(); 

        //check permission granted 
        if (report.areAllPermissionsGranted()){ 
         intentList = addIntentsToList(mContext, intentList, takePhotoIntent); 
         intentList = addIntentsToList(mContext, intentList, pickIntent); 

        } 

        else if (list_GrantedPermission.size() > 0){ 
         String grantedpermissionName = list_GrantedPermission.get(0).getPermissionName(); 

         if (grantedpermissionName.equals(android.Manifest.permission.CAMERA)) 
          intentList = addIntentsToList(mContext, intentList, takePhotoIntent); 

         else 
          intentList = addIntentsToList(mContext, intentList, pickIntent); 
        } 
        else { 

        } 

        //request a source 
        if (intentList.size() > 0) { 
         chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1), 
           getString(R.string.message_select_source)); 
         chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{})); 

         startActivityForResult(chooserIntent, REQUEST_CODE_PICTURE); 
        } 

        if (report.isAnyPermissionPermanentlyDenied()){ 
         final AlertDialog.Builder alertBuilder = new AlertDialog.Builder(mContext); 

         alertBuilder.setTitle(getString(R.string.message_permission_required)); 
         alertBuilder.setCancelable(true); 

         alertBuilder.setMessage(getString(R.string.message_permission_required)); 
         alertBuilder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int id) { 
           dialog.dismiss(); 
          } 
         }); 
         AlertDialog dialog = alertBuilder.create(); 
         dialog.show(); 
        } 

       } 

       @Override 
       public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) { 
        token.continuePermissionRequest(); 
       } 

      }, android.Manifest.permission.CAMERA, android.Manifest.permission.READ_EXTERNAL_STORAGE); 
     } 
    }); 
+0

これらのインテントを使用するためのカメラまたはストレージのアクセス権は必要ありません。 – ianhanniballake

+0

@jingこの質問の解決方法はありますか? –

+0

@NitinPatel残念ながら、私は解決策がありません。解決策はありますか? – jing

答えて

0

私はあなたが写真を撮るか許可するかについてのthis答えを見てみることをお勧めします。

また、ImagePickerは、写真を撮ったり撮ったりする簡単な方法です。

関連する問題