我有两个应用程序: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>
路径.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();
App1在收到来自App2的结果后,执行以下操作:
Uri imageUri = data.getData();
if(imageUri != null) {
ImageView iv = (ImageView) layoutView.findViewById(R.id.imageReceived);
iv.setImageURI(imageUri);
}
在 App1 中,从 App2 返回时,我得到了以下异常:
java.lang.SecurityException:权限拒绝:从进程记录{52a99eb0 3493:com.android.App1.app/u0a57} (pid=3493, uid=10057) 打开未从 uid 10058 导出的提供程序 android.support.v4.content.FileProvider
我做错了什么?
callingPackage
以确定它的值是否符合你的预期? - CommonsWare