【发布时间】:2014-08-19 12:00:57
【问题描述】:
我有两个应用程序: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 提供者 android.support.v4.content.FileProvider 来自 ProcessRecord{52a99eb0 3493:com.android.App1.app/u0a57} (pid=3493, uid=10057) 不是从 uid 10058 导出的
我做错了什么?
【问题讨论】:
-
@KaranMer 但我正在遵循这些步骤.. :(
-
您检查过
callingPackage是否是您期望的值? -
@CommonsWare OK .. 这似乎是问题所在。那么我该怎么做呢?我需要将其分配给调用应用程序。谢谢 ! :)
-
@CommonsWare Binder.callingUid() 和 getPackageManager().getNameForUid(uid) 给我的是 App2 的包名而不是 App1
标签: android android-fileprovider