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 - 用于共享的选择器对话框 - 不同的意图取决于所选的应用程序?