不理解 IntentFilters

Not understanding IntentFilters

我正在尝试使用 Google Drive 中的 'Send a Copy' 菜单项从 Google Drive 复制一个二进制文件(我自己定制的内容,不是标准文件)到我的应用程序。

我看了一下 Google Drive 使用 Intent Intercept 发送的意图,基本上是

我应用的相关 activity 中的意图过滤器是:

    <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 驱动器的 'Send file with' 列表中。

如果我 select 我的应用程序作为目标,它出现在相关 activity 的 onCreate() 中,我可以使用 getIntent() 获得意图,但是 getData() - 这是我以前在其他地方的 ACTION_VIEW 意图中使用的 - returns null,可能并不奇怪,因为数据在上面的意图中被列为 null。

以我有限的知识和阅读了 'Receiving simple data from other apps' 文档,我完全不确定接下来要做什么。如何访问文件数据以便复制它?

下一个问题,假设我确实成功了(有帮助的答案),如果我想一次从 Google Drive 发送多个文件,在我看来它将使用 SEND_MULTIPLE 意图,那么我将如何访问每个文件数据?

How do I get access to the file data so I can copy it?

指向共享内容的 UriEXTRA_STREAM 中。在 Intent 上调用 getParcelableExtra() 以检索它。然后,您可以使用 ContentResolveropenInputStream() 读取由 Uri.

标识的内容

如何获取extra的值在the documentation中有介绍。

it will then use the SEND_MULTIPLE intent, so how would I access each files data then?

EXTRA_STREAM 现在将是 Uri 值的列表。在 Intent 上调用 getParcelableArrayListExtra() 以检索它。然后,您可以遍历该列表并使用 ContentResolveropenInputStream() 来获取由 Uri.

标识的内容

和之前一样,如何获取extra被the documentation覆盖的值。