Kitkat, ошибка при загрузке изображения

Я пытаюсь загрузить изображение. Это хорошо работает, когда я использую API 18 или ниже, но если я использую API 19 (Kitkat), проблема безопасности ocurrs... Я не уверен, как решить это, но курсор-загрузчик через меня исключение. Я читаю somenting как

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

но без хорошего результата. Если вы видели ниже, у меня есть новый путь к файлу изображения, поэтому я могу управлять этим?

* STACK_TRACE = java.lang.SecurityException: отказ в разрешении: чтение com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A1384 из 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" />

Ответы

Ответ 1

Хорошо существует простое решение для этого:

    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 на KitKat возвращает разные Uri для Intent.ACTION_GET_CONTENT

также проверьте это.

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

Спасибо искателю.

ПРИМЕЧАНИЕ. Это временное решение, я не мог найти лучшего способа заставить его работать. Но на данный момент я могу сказать, что проблема решена.

Ответ 2

Я нашел эту ошибку сегодня.

Сообщается об ошибке для кордовы и KitKat. Вы можете найти подробную информацию здесь https://issues.apache.org/jira/browse/CB-5398

Ошибка возникает, когда выбранный снимок происходит из новых опций KitKat "Недавние", "Загрузки" и т.д.

Если вы дойдете до приложения Gallery и откройте стандартную галерею, у вас не должно быть никаких проблем.

Ответ 3

Это может зависеть от того, откуда приходит ваш uri. Если Uri был возвращен из сборщика файлов, все должны работать без исключений.

Если вы построите Uri самостоятельно или сохранили Uri, тогда могут быть проблемы.

Это присуще новой платформе доступа к хранилищу, представленной в Android 4.4 KitKat.

Если пользователь выбирает файлы для открытия в сборщике файлов, система предоставляет разрешение на использование этих файлов в вашем приложении. Эти разрешения действительны, пока устройство не перезагружается.

Если Uri сохраняется, тогда права, предоставленные для доступа к Uri, также должны сохраняться. Для более подробной информации смотрите здесь: https://developer.android.com/guide/topics/providers/document-provider.html#permissions