奇巧,尝试加载图像时出错

我试图加载图像..当我使用API​​ 18或更低,但如果我使用API​​ 19(Kitkat)安全问题的一个问题…我不知道如何解决这个问题,但光标加载器经常遇到一个exception。 我读得如此喜欢

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

但没有一个好的结果。 如果你看到下面我有一个关于图像文件的新path,所以我可以pipe理这个?

* STACK_TRACE = java.lang.SecurityException:权限拒绝:阅读com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A1384 from pid = 3632,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" /> 

那么存在一个简单的解决scheme:

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

注:没有必要和额外的许可来做到这一点(清单修改)。 只写这几个代码,然后你将能够从“下载”或“最近”

我阅读这篇文章,帮我写这个。

KitKat上的Android图库为Intent.ACTION_GET_CONTENT返回不同的Uri

也检查这一点

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

感谢发现者。

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

我今天才发现这个错误。

这是一个报告的Cordova和KitKat的错误。 你可以在这里find详细的信息https://issues.apache.org/jira/browse/CB-5398

当图片select来自新的KitKat选项“最近”,“下载”等时,就会出现这个错误。

如果你一直走到画廊的应用程序,并打开标准画廊,你应该没有任何问题。

这可能取决于你的uri来自哪里。 如果Uri从文件select器返回,所有人都应该毫无例外地工作。

如果你自己build立Uri或坚持Uri,那么可能会出现问题。

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

如果用户在文件select器中select要打开的文件,则系统将准许这些文件的权限授予您的应用程序。 只要设备没有重新启动,这些权限就是有效的。

如果乌里坚持,那么授予访问乌里的权利也必须坚持。 欲了解更多详情,请看这里: https : //developer.android.com/guide/topics/providers/document-provider.html#permissions