gpt4 book ai didi

Android - 文件提供者 - 权限拒绝

转载 作者:IT王子 更新时间:2023-10-28 23:40:48 26 4
gpt4 key购买 nike

我有两个应用程序:app1 和 app2。

App2 有:

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.android.provider.ImageSharing"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>

paths.xml:

<paths>

<files-path name="my_images" path="images/"/>

</paths>

App2 在其 Activity 中从 App1 接收请求以获取图像的 URI。确定 URI 后,App2 Activity 会执行以下操作:

Intent intent = new Intent();

intent.setDataAndType(contentUri, getContentResolver().getType(contentUri));

int uid = Binder.getCallingUid();
String callingPackage = getPackageManager().getNameForUid(uid);

getApplicationContext().grantUriPermission(callingPackage, contentUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION);

setResult(Activity.RESULT_OK, intent);
finish();

从 App2 收到结果后,App1 执行以下操作:

Uri imageUri = data.getData();
if(imageUri != null) {
ImageView iv = (ImageView) layoutView.findViewById(R.id.imageReceived);
iv.setImageURI(imageUri);
}

在 App1 中,从 App2 返回时,出现以下异常:

java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{52a99eb0 3493:com.android.App1.app/u0a57} (pid=3493, uid=10057) that is not exported from uid 10058

我做错了什么?

最佳答案

原来解决这个问题的唯一方法是授予所有可能需要它的包的权限,如下所示:

List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

关于Android - 文件提供者 - 权限拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24467696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com