相关疑难解决方法(0)

Android - 文件提供程序 - 权限拒绝

我有两个应用程序: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>
Run Code Online (Sandbox Code Playgroud)

paths.xml:

<paths>

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

</paths>
Run Code Online (Sandbox Code Playgroud)

App2从App1的Activity中接收请求以获取图像的URI.确定URI后,App2活动执行以下操作:

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();
Run Code Online (Sandbox Code Playgroud)

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

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

在App1中,从App2返回时,我得到以下异常:

java.lang.SecurityException:Permission Denial:从ProcessRecord {52a99eb0 3493:com.android.App1.app/u0a57}(pid = 3493,uid = 10057)打开提供者android.support.v4.content.FileProvider uid 10058

我究竟做错了什么 ?

android android-fileprovider

58
推荐指数
5
解决办法
5万
查看次数

尝试从MediaStore读取时,Android KitKat securityException

java.lang.SecurityException:权限拒绝:从ProcessRecord打开提供程序com.android.providers.media.MediaDocumentsProvider {430b1748 29271:com.xxx/u0a88}(pid = 29271,uid = 10088)需要android.permission.MANAGE_DOCUMENTS或android. permission.MANAGE_DOCUMENTS

我已添加MANAGE_DOCUMENTSREAD_EXTERNAL_STORAGE权限,但我仍然收到此错误.违规代码:

 public static String getImagePath(HailoDriverApplication app, Uri uri) {
    Cursor cursor = null;
    if (uri == null) {
        return null;
    }
    try {
        cursor = app.getContentResolver().query(uri, new String[] {
            MediaStore.Images.Media.DATA
        }, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        if (cursor.moveToFirst()) {
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

正如所要求的清单片段:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.x.x.x" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" /> …
Run Code Online (Sandbox Code Playgroud)

android android-4.4-kitkat

46
推荐指数
3
解决办法
3万
查看次数