不了解 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()
以检索它。然后,您可以使用ContentResolver
和openInputStream()
读入由Uri
标识的内容。
extra的值如何获取在the documentation中介绍。
然后它将使用 SEND_MULTIPLE 意图,那么我将如何访问每个文件的数据?
EXTRA_STREAM
现在将是Uri
值的列表。在Intent
上致电getParcelableArrayListExtra()
以检索它。然后,您可以遍历该列表并使用 ContentResolver
和 openInputStream()
来获取由 Uri
标识的内容。
和之前一样,额外的值如何获取由the documentation覆盖。
【讨论】:
以上是关于不了解 IntentFilter的主要内容,如果未能解决你的问题,请参考以下文章