Android如何根据选择器意图中的用户操作请求权限

Posted

技术标签:

【中文标题】Android如何根据选择器意图中的用户操作请求权限【英文标题】:Android how to request permission based on user action in chooser intent 【发布时间】:2017-07-22 23:18:53 【问题描述】:

我无法根据用户在选择器意图中选择的内容请求用户许可。目前,我的程序是在选择器意图出现之前请求权限。如何在他们选择意图后以请求权限的方式实现。下面的代码是先请求相机权限或存储权限,然后只允许用户选择他们要从相机或图库中拍照。

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

【问题讨论】:

您不需要相机或存储权限来使用这些意图。 @jing 这个问题你有解决方案吗? @NitinPatel 不幸的是,我没有解决方案。你有解决办法吗? @jing 如果还在寻找解决方案,可以试试这个解决方案:***.com/a/44825525/7806873 【参考方案1】:

我建议你看一下this关于拍照或拍照权限的答案。

另外,ImagePicker 是一种挑选或拍照的简单方法。

【讨论】:

以上是关于Android如何根据选择器意图中的用户操作请求权限的主要内容,如果未能解决你的问题,请参考以下文章

如何获取前两个选择器意图并仅在android中为用户显示它们

android意图选择器出现缓慢

Android - 用于共享的选择器对话框 - 不同的意图取决于所选的应用程序?

Android 深层链接 - 不显示意图选择器弹出窗口,强制打开应用

片段中的Android选择器意图到图片照片

如何仅从 Google Photos 应用程序中选择图像? Android 谷歌照片意图