Kitkat,尝试加载图像时出错

时间:2013-11-27 16:42:04

标签: android

我正在尝试加载图片..当我使用API​​ 18或更低版本时,这很有效,但如果我使用API​​ 19(Kitkat)安全问题......我不知道如何解决这个,但是游标加载器通过我一个例外。我读得像是

http://developer.android.com/guide/topics/providers/document-provider.html#client

但没有好结果。如果您在下面看到我有关于图像文件的新路径,那么我可以管理它吗?

* STACK_TRACE = java.lang.SecurityException:Permission Denial:从pid = 3632读取com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A1384, uid = 10027需要android.permission.MANAGE_DOCUMENTS或grantUriPermission()*

CursorLoader cursorLoader = new CursorLoader(
                context,
                uri, 
                projection,
                null, null, null);

我在清单中的一些权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
    <uses-permission android:name="com.android.vending.BILLING" />

3 个答案:

答案 0 :(得分:17)

存在一个简单的解决方案:

    public static final String KITKAT_VALUE = 1002;

Intent intent;

        if (Build.VERSION.SDK_INT < 19){
                                intent = new Intent();
                                intent.setAction(Intent.ACTION_GET_CONTENT);
                                intent.setType("image/*");
                                startActivityForResult(intent, KITKAT_VALUE);
                            } else {
                                intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                                intent.addCategory(Intent.CATEGORY_OPENABLE);
                                intent.setType("image/*");
                                startActivityForResult(intent, KITKAT_VALUE);
                        }

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == KITKAT_VALUE ) {
     if (resultCode == Activity.RESULT_OK) {
     // do something here
     }
  }
}

注意:没有必要以及执行此操作的其他权限(清单修改)。只需编写这几个代码,然后您就可以从“下载”或“最近”

中选择图像

我读过这篇文章,请帮我写一下。

Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT

也检查这个

http://developer.android.com/guide/topics/providers/document-provider.html#client

感谢发现者。

注意:这是一个时间解决方案,我无法找到更好的方法使其工作。但是现在我可以说,问题已经解决了。

答案 1 :(得分:5)

我今天刚发现这个错误。

这是cordova和KitKat报告的错误。您可以在https://issues.apache.org/jira/browse/CB-5398

找到详细信息

如果选中的图片来自新的KitKat选项“最近”,“下载”等,则会出现错误。

如果您一直走到Gallery应用程序并打开标准图库,那么您应该没有任何问题。

答案 2 :(得分:3)

这可能取决于你的uri来自哪里。 如果Uri是从文件选择器返回的,那么所有这些都应该没有例外。

如果你自己建造Uri或坚持Uri,那么可能会有问题。

这是Android 4.4 KitKat引入的新存储访问框架中固有的。

如果用户在文件选择器中选择要打开的文件,系统会将准确的theese文件的权限授予您的应用程序。只要设备不是重新启动,Theese权限就是有效的。

如果Uri是持久的,那么授予访问Uri的权限也必须保留。有关详细信息,请查看此处 https://developer.android.com/guide/topics/providers/document-provider.html#permissions