不了解 IntentFilter

Posted

技术标签:

【中文标题】不了解 IntentFilter【英文标题】:Not understanding IntentFilters 【发布时间】:2020-06-21 04:29:39 【问题描述】:

我正在尝试使用 Google 云端硬盘中的“发送副本”菜单项将二进制文件(我自己的定制内容,不是标准内容)从 Google 云端硬盘复制到我的应用程序中。

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

动作 - android.intent.action.SEND 数据 - 空 MIME - 应用程序/八位字节流 URI - 意图:#intent;action=android.intent.action.SEND;type=application/octet-stream;launchFlags=0x1b080000;end 标志 - FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET FLAG_ACTIVITY_FORWARD_RESULT FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT FLAG_ACTIVITY_PREVIOUS_IS_TOP FLAG_RECEIVER_FOREGROUND 附加功能 - 第1类:android.net.Uri $ HierarchicalUri键:android.intent.extra.STREAM值:内容://com.google.android.apps.docs.storage.legacy/enc%3Dy1Gjnka2NiGyk8sKV0CwRjnjL3WimTTirLdLn58FBZ7yVAJ2MPJNL_ZYQFzzl0a3pi0bnikAy29Y%0AcprYV_o8bxcPbb8r0Vv_wfq89BjBp1nQHOPUT8CiHQEzPwVwRhvByYmijg% 3D%3D%0A

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

    <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 一起使用的来自其他地方的意图 - 返回 null,这可能并不奇怪,因为 Data 在上面的意图中被列为 null。

我完全不确定(以我有限的知识并阅读了“从其他应用程序接收简单数据”文档)是下一步该做什么。如何访问文件数据以便进行复制?

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

【问题讨论】:

【参考方案1】:

如何访问文件数据以便进行复制?

指向共享内容的Uri 位于EXTRA_STREAM 中。在Intent 上调用getParcelableExtra() 以检索它。然后,您可以使用ContentResolveropenInputStream() 读入由Uri 标识的内容。

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

然后它将使用 SEND_MULTIPLE 意图,那么我将如何访问每个文件的数据?

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

和之前一样,额外的值如何获取由the documentation覆盖。

【讨论】:

以上是关于不了解 IntentFilter的主要内容,如果未能解决你的问题,请参考以下文章

了解 SSTable 不变性

不了解 IntentFilter

不了解 JWT “加密”

不了解DDD前:什么鬼?了解DDD后:真香!

七个你可能不了解的CSS单位

原创 | 不了解这12个语法糖,别说你会Java!