不理解 IntentFilters
Not understanding IntentFilters
我正在尝试使用 Google Drive 中的 'Send a Copy' 菜单项从 Google Drive 复制一个二进制文件(我自己定制的内容,不是标准文件)到我的应用程序。
我看了一下 Google Drive 使用 Intent Intercept 发送的意图,基本上是
- 行动 - android.intent.action.SEND
- 数据 - 空
- MIME - application/octet-stream
- 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
- Extras - 1 Class:android.net.Uri$HierarchicalUri 键:android.intent.extra.STREAM 值:content://com.google.android.apps.docs.storage.legacy/enc%3Dy1Gjnka2NiGyk8sKV0CwRjnjL3WimTTirLdLn58FBZ7yVAJ2MPJNL_ZYQFzzl0a3pi0bnikAy29Y%0AcprYV_o8bxcPbb8r0Vv_wfq89BjBp1nQHOPUT8CiHQEzPwVwRhvByYmijg%3D%3D%0A
我应用的相关 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?
指向共享内容的 Uri
在 EXTRA_STREAM
中。在 Intent
上调用 getParcelableExtra()
以检索它。然后,您可以使用 ContentResolver
和 openInputStream()
读取由 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()
以检索它。然后,您可以遍历该列表并使用 ContentResolver
和 openInputStream()
来获取由 Uri
.
标识的内容
和之前一样,如何获取extra被the documentation覆盖的值。
我正在尝试使用 Google Drive 中的 'Send a Copy' 菜单项从 Google Drive 复制一个二进制文件(我自己定制的内容,不是标准文件)到我的应用程序。
我看了一下 Google Drive 使用 Intent Intercept 发送的意图,基本上是
- 行动 - android.intent.action.SEND
- 数据 - 空
- MIME - application/octet-stream
- 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
- Extras - 1 Class:android.net.Uri$HierarchicalUri 键:android.intent.extra.STREAM 值:content://com.google.android.apps.docs.storage.legacy/enc%3Dy1Gjnka2NiGyk8sKV0CwRjnjL3WimTTirLdLn58FBZ7yVAJ2MPJNL_ZYQFzzl0a3pi0bnikAy29Y%0AcprYV_o8bxcPbb8r0Vv_wfq89BjBp1nQHOPUT8CiHQEzPwVwRhvByYmijg%3D%3D%0A
我应用的相关 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?
指向共享内容的 Uri
在 EXTRA_STREAM
中。在 Intent
上调用 getParcelableExtra()
以检索它。然后,您可以使用 ContentResolver
和 openInputStream()
读取由 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()
以检索它。然后,您可以遍历该列表并使用 ContentResolver
和 openInputStream()
来获取由 Uri
.
和之前一样,如何获取extra被the documentation覆盖的值。