打开意图相机时,提供者无权访问内容
Posted
技术标签:
【中文标题】打开意图相机时,提供者无权访问内容【英文标题】:provider does not have permission to content when open intent camera 【发布时间】:2021-05-01 13:48:55 【问题描述】:我有一个基本的 :app 模块。还有 :camera 模块。
在相机模块中,我使用意图打开本机相机。
MediaStore.ACTION_IMAGE_CAPTURE
但相机无法工作,因为我收到错误消息
UID 10388 does not have permission to content://com.example.android.provider/attachment_file/Android/media/com.example.android.dev/some_name.jpg [user 0]
这是应用程序中的我的供应商 AndroidManifest:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="$applicationId.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path" />
</provider>
如果您在"com.example.android.provider"
上更改android:authorities
,则相机可以工作。但是由于安装了其他构建变体,该应用程序停止在手机上安装
【问题讨论】:
【参考方案1】:相机权限保护级别很危险。
因此您必须在运行时向用户请求此权限。
这里可以看到相机权限等权限等级: https://developer.android.com/reference/android/Manifest.permission#CAMERA
并查看 Android 开发人员培训网站示例,您究竟是如何请求此权限的。所有信息都是他们的: https://developer.android.com/training/permissions/requesting
代码应该是这样的:
if (ContextCompat.checkSelfPermission(
CONTEXT, Manifest.permission.REQUESTED_PERMISSION) ==
PackageManager.PERMISSION_GRANTED)
// You can use the API that requires the permission.
performAction(...);
else if (shouldShowRequestPermissionRationale(...))
// In an educational UI, explain to the user why your app requires this
// permission for a specific feature to behave as expected. In this UI,
// include a "cancel" or "no thanks" button that allows the user to
// continue using your app without granting the permission.
showInContextUI(...);
else
// You can directly ask for the permission.
// The registered ActivityResultCallback gets the result of this request.
requestPermissionLauncher.launch(
Manifest.permission.REQUESTED_PERMISSION);
【讨论】:
以上是关于打开意图相机时,提供者无权访问内容的主要内容,如果未能解决你的问题,请参考以下文章