android - Kitkat,尝试加载图像时出错

标签 android

我正在尝试加载图像。当我使用 API 18 或更低版本时,这很好用,但如果我使用 API 19 (Kitkat),则会出现安全问题......我不确定如何解决这个,但是 cursorloader 给我一个异常(exception)。我读了 somenting 就像

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

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

*STACK_TRACE=java.lang.SecurityException:权限被拒绝:从 pid=3632 读取 com.android.providers.media.MediaDocumentsProvider uri 内容://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);

我在 list 中的一些权限

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

最佳答案

我们有一个简单的解决方案:

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

注意:不需要额外的权限来执行此操作( list 修改)。只需编写这几行代码,您就可以从“下载”或“最近”中选择图片

我看了这篇文章,帮我写这个。

Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT

也检查这个

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

感谢发现者。

注意:这是一个暂时的解决方案,我找不到更好的方法让它工作。但现在我可以说,问题解决了。

关于android - Kitkat,尝试加载图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20248178/

相关文章:

android - 为 TextView 启用滚动

android - 如何在 Google Play 上使用测试帐号? GooglePlay 始终将我视为购买者

android - 如何在android studio Gradle中添加从项目到模块的libs依赖

android - Ionic Android build : java. lang.IllegalStateException:未指定 buildToolsVersion

android - 没有开启Root的设备的 Android 应用程序的默认数据库位置是什么?它与 Root过的一样吗?

android - 进度条错误

java - Web 服务无法正常工作

android - 谷歌地图抛出空指针异常

java - Android 服务需要始终运行(从不暂停或停止)

android - 库模块中的依赖关系