Я пытаюсь получить изображение из стороннего приложения (например, WhatsApp) в свое приложение (тестируется на Marshmallow). Когда я «делюсь изображением» из WhatsApp и делюсь им со своим приложением, я получаю URI примерно такого вида:
content://com.whatsapp.provider.media/item/61025
Но в моем приложении, когда я вызываю getContentResolver().openInputStream(uri)
или getContentResolver().openFileDescriptor(uri, "r")
с указанным выше URI, происходит сбой с исключением:
java.lang.SecurityException: Отказ в разрешении: открытие провайдера com.whatsapp.MediaProvider из ProcessRecord{a4b804a 30321:com.myapp/u0a145} (pid=30321, uid=10145), который не экспортируется из uid 10083
Что я уже пробовал
Я искал это исключение на SO и нашел похожий вопрос, но для импорта изображений из Google Фото и получил, что нужно добавить разрешение нравится:
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
Но не согласен с этим, потому что может быть много приложений и нужно добавить разрешение для каждого из них или что-то в этом роде.
В некоторых других ответах было предложено немедленно прочитать/скопировать данные от поставщика контента. Но не знаю как. Потому что я получаю исключение в самом openInputStream
.
Я также должен упомянуть, что изображение WhatsApp может быть успешно передано другим приложениям (например, Google Диску), поэтому должен быть какой-то способ сделать это.
Пожалуйста, кто-нибудь может дать подсказки или рабочее решение по этому поводу?
content://
), а не когда оно получает uri файла (file://
). Поскольку галерея и другие приложения, которые я пробовал, делились своими изображениями, используя файл uri, поэтому я не получил исключения. Но WhatsApp дает мне контент URI своих изображений. - person Atul   schedule 05.10.2017getContentResolver().openInputStream(uri)
, и он тут же падает, особенно когда uri является содержимым uri из WhatsApp. - person Atul   schedule 05.10.2017