本文介绍了试图从MediaStore读取时的Andr​​oid奇巧SecurityException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经添加了管理文档权限和READ_EXTERNAL_STORAG​​E。我仍然得到这个错误。有问题的code:

 公共静态字符串getImagePath(HailoDriverApplication应用,开放的URI){
    光标光标= NULL;
    如果(URI == NULL){
        返回null;
    }
    尝试 {
        光标= app.getContentResolver()查询(URI,新的String [] {
            MediaStore.Images.Media.DATA
        },NULL,NULL,NULL);
        INT与Column_Index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        如果(cursor.moveToFirst()){
            返回cursor.getString(Column_Index中);
        }
    } 最后 {
        如果(光标!= NULL){
            cursor.close();
        }
    }
    返回null;
}
 

由于清单的要求片断:

 <舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
的xmlns:工具=htt​​p://schemas.android.com/tool​​s
包=com.x.x.x>

<用途-SDK
    安卓的minSdkVersion =8
    机器人:targetSdkVersion =16/>

<使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
<使用-权限的Andr​​oid:名称=android.permission.VIBRATE/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_NETWORK_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_COURSE_LOCATION/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_FINE_LOCATION/>
<使用-权限的Andr​​oid:名称=android.permission.RECEIVE_BOOT_COMPLETED/>
<使用-权限的Andr​​oid:名称=android.permission.WAKE_LOCK/>
<使用-权限的Andr​​oid:名称=android.permission.READ_LOGS/>
<使用-权限的Andr​​oid:名称=android.permission.READ_PHONE_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.READ_CONTACTS/>
<使用-权限的Andr​​oid:名称=android.permission.CHANGE_WIFI_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.ACCESS_WIFI_STATE/>
<使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>
<使用-权限的Andr​​oid:名称=android.permission.READ_EXTERNAL_STORAG​​E/>
<使用-权限的Andr​​oid:名称=android.permission.MANAGE_DOCUMENTS/>
<使用-权限的Andr​​oid:名称=android.permission.SYSTEM_ALERT_WINDOW/>
<使用-权限的Andr​​oid:名称=com.google.android.providers.gsf.permission.READ_GSERVICES/>
<使用,许可
    机器人:名称=android.permission.UPDATE_DEVICE_STATS
    工具:忽略=ProtectedPermissions/>
<使用-权限的Andr​​oid:名称=android.permission.WRITE_SETTINGS/>
<使用-权限的Andr​​oid:名称=android.intent.action.BATTERY_CHANGED/>
<使用,许可
    机器人:名称=android.permission.INSTALL_PACKAGES
    工具:忽略=ProtectedPermissions/>
<使用-权限的Andr​​oid:名称=android.permission.GET_ACCOUNTS/>
<使用-权限的Andr​​oid:名称=com.google.android.c2dm.permission.RECEIVE/>
 

解决方案

有同样的问题在过去的几天。尝试了一些解决方案,但由于某些原因,我得到允许就拒绝开放的内容提供商,甚至当我有android.permission.MANAGE_DOCUMENTS权限添加到我的清单一些图片。

下面是一个解决方法,暂时

  I =新的意图(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(ⅰ,CHOOSE_IMAGE);
 

这迫使旧的图片库打开,而不是新的奇巧文档视图。

现在,你可以通过调用你的onActivityResult以下得到URI:

 乌里selectedImageURI = data.getData();
 

希望这有助于。

I've added the Manage Documents permission and READ_EXTERNAL_STORAGE. I still get this error. The offending code:

 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;
}

As requested snippet of manifest:

<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" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COURSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission
    android:name="android.permission.UPDATE_DEVICE_STATS"
    tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.intent.action.BATTERY_CHANGED" />
<uses-permission
    android:name="android.permission.INSTALL_PACKAGES"
    tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
解决方案

Had the same problem for the last couple of days. Tried a few solutions, but for some reason I was getting permission denial on Uri content provider for some images even when I had the android.permission.MANAGE_DOCUMENTS permission added to my manifest.

Here's a workaround, for the time being:

i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, CHOOSE_IMAGE);

This forces the older image gallery to open instead of the new Kitkat documents view.

Now, you can get the Uri by calling the following in your onActivityResult:

Uri selectedImageURI = data.getData();

Hope this helps.

这篇关于试图从MediaStore读取时的Andr​​oid奇巧SecurityException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 04:04