Редактировать: Это не повторяющийся вопрос. Без вопросов, я видел ответы, как решить эту проблему, когда вы не можете контролировать действие, отправляющее намерение (в моем случае приложение для просмотра в браузере или, возможно, приложение для просмотра файлов отправляет намерение в мое приложение). А потом, более конкретно, это не касается фотографий / галереи.
Это уже давно мучает мое приложение. Лично я не могу заставить это случиться с любым устройством, но я вижу, что после сбоев это часто случается с другими.
Мое приложение получает намерение, содержащее ZIP-файл, из внешнего приложения. Я ловлю это либо в onCreate()
, либо в onNewIntent()
:
Intent intent = getIntent();
if (intent != null && intent.getData() != null)
beginZipIntent(intent);
В beginZipIntent()
:
Uri data = intent.getData();
String filename = data.toString();
// Open input stream to copy ZIP to a temporary directory.
Uri uri = Uri.parse(filename);
InputStream inputStream = null;
try
{
inputStream = getContentResolver().openInputStream(uri); // This fails
}
catch (Exception e)
{
//...
}
В строке выше некоторые устройства выходят из строя:
Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/2772 from pid=26094, uid=10094 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
У меня нет контроля над приложением / деятельностью, отправляющей намерение. Я подумал, что, немедленно взяв файл и сохранив его во временный каталог, я мог бы исправить это (как видно из других ответов) - но нет.
Я также добавил android.permission.MANAGE_DOCUMENTS
, но, как и ожидалось (из других ответов), он не работает.
Кто-нибудь когда-нибудь сталкивался с этим? Похоже, что это влияет на устройства от Android 4 до 7, поэтому не относится только к одной версии ОС.