Приложение получателя - обработать разрешение для URI фильтра намерений - PullRequest
0 голосов
/ 12 марта 2020

Я так запутался со всем, что есть у Fileprovider, Android. Весь день я провожу за просмотром видео и просмотром других сообщений ... Надеюсь, кто-нибудь может мне быстро помочь.

У меня есть приложение, которое обрабатывает изображения / PDF et c ... и загружает их на сервер. Для этого я применил фильтр намерений в моей активности входа.

   <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>

Это действие получает намерение, но отправляет свои данные другому действию.

   (intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? ArrayList<Uri>)?.let {
        activity.startActivity(MainActivity.newInstance(activity, it))
    }

и

 public static Intent newInstance(@NonNull Context context, @NonNull ArrayList<Uri> images) {
    Intent intent = new Intent(context, MainActivity.class);
    intent.putParcelableArrayListExtra(INTENT_EXTRA_IMAGES, images);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    return intent;
}

Это действие пытается прочитать Uri с помощью the contentresolver

val openInputStream = context.contentResolver?.openInputStream(originalFileUri)

Но при этом он будет sh - иногда ...

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

java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{40bd561 8082:APPNAME/u0a749} (pid=8082, uid=10749) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

Если я поделюсь фотографией из WhatsApp в свое приложение, я получу

java.lang.SecurityException: Permission Denial: opening provider com.whatsapp.contentprovider.MediaProvider from ProcessRecord{a684e0e 6544:APPNAME/u0a749} (pid=6544, uid=10749) that is not exported from UID 10140

Я не понимаю, почему это так. ..

1 Ответ

1 голос
/ 12 марта 2020

Это действие получает намерение, но отправляет свои данные другому действию.

Это не совсем идеально.

Но, если вам нужно это сделать, добавьте FLAG_GRANT_READ_URI_PERMISSION (и, при необходимости, FLAG_GRANT_WRITE_URI_PERMISSION) до Intent, который вы используете для запуска MainActivity. В противном случае MainActivity может не иметь разрешения для работы с содержимым .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...