Не понимая IntentFilters - PullRequest
       56

Не понимая IntentFilters

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

Я пытаюсь скопировать двоичный файл (мой собственный контент, не являющийся стандартным) из Google Drive в мое приложение с помощью пункта меню «Отправить копию» на Google Диске.

Я посмотрел в намерении, которое Google Drive отправляет с помощью Intent Intercept, и в основном это

  • ACTION - android .intent.action.SEND
  • DATA - null
  • MIME - приложение / поток октетов
  • URI - намерение: #intent; действие = android .intent.action.SEND; тип = приложение / поток октетов; launchFlags = 0x1b080000; конец
  • ФЛАГИ - FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET FLAG_ACTIVITY_FORWARD_RESULT FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT FLAG_ACTIVITY_PREVIOUS_IS_TOP FLAG_RECEIVER_FOREGROUND

Фильтр намерений в релевантной активности моего приложения:

    <intent-filter>
        <action android:name="android.intent.action.SEND" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:mimeType="application/octet-stream" />
    </intent-filter>

, и после некоторой возни он теперь отображается в списке «Отправить файл с» на Google Диске .

Если я выберу свое приложение в качестве цели, оно появится в onCreate () соответствующего действия, я могу получить намерение в порядке с помощью getIntent (), но getData () - это то, что я использовал использовать с намерениями ACTION_VIEW из других мест - возвращает ноль, вероятно, неудивительно, поскольку в приведенном выше намерении данные перечислены как ноль.

В чем я не совсем уверен - с моими ограниченными знаниями и прочтением «Получение» простые данные из документации других приложений - что делать дальше. Как получить доступ к данным файла, чтобы я мог их скопировать?

Следующий вопрос, при условии, что у меня все получится (с полезными ответами), если я хочу отправить сразу несколько файлов с Google Диска, мне кажется, что тогда он будет использовать намерение SEND_MULTIPLE, так как же тогда я получу доступ к данным каждого файла?

1 Ответ

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

Как получить доступ к данным файла, чтобы я мог их скопировать?

A Uri, указывающий на общий контент, указан в EXTRA_STREAM. Позвоните getParcelableExtra() на Intent, чтобы получить его. Затем вы можете использовать ContentResolver и openInputStream() для чтения содержимого, обозначенного этим Uri.

Как получить значение дополнительного, описано в документации .

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

EXTRA_STREAM теперь будет списком Uri значений. Позвоните getParcelableArrayListExtra() на Intent, чтобы получить его. Затем вы можете выполнить итерацию по этому списку и использовать ContentResolver и openInputStream(), чтобы получить контент, идентифицируемый Uri.

Как и раньше, как получить дополнительное значение, покрываемое документация .

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