让 Flutter 应用接受传入的意图

Posted

技术标签:

【中文标题】让 Flutter 应用接受传入的意图【英文标题】:Making a Flutter app accept incoming intents 【发布时间】:2020-07-12 23:01:19 【问题描述】:

Flutter for android developers 文档解释了如何让 Flutter 应用接受传入的 Android Intent,并给出了接受 Share Intent 的代码示例。我已经复制了它,效果很好。

但我现在正试图让我的应用接受其他类型的意图,特别是编辑联系人意图,这样当我使用默认的电话应用并点击在联系人上,建议我的应用完成操作。

我已经尝试了<intent-filter> 的所有可能组合,我在谷歌搜索和搜索 GitHub 后可以找到,但没有任何东西可以让它工作。举几个例子:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="vnd.android.cursor.item/person"/>
    <data android:mimeType="vnd.android.cursor.item/contact"/>
    <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
    <data android:mimeType="vnd.android.cursor.item/phone"/>
    <data android:mimeType="vnd.android.cursor.item/phone_v2"/>
</intent-filter>

<intent-filter>
    <action android:name="android.intent.action.GET_CONTENT"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts"/>
    <data android:mimeType="vnd.android.cursor.item/contact" android:host="contacts"/>
    <data android:mimeType="vnd.android.cursor.item/raw_contact" android:host="contacts"/>
</intent-filter>

<intent-filter >
    <action android:name="android.intent.action.EDIT" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host="contacts"
        android:mimeType="vnd.android.cursor.item/person" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/contact" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/raw_contact" />
</intent-filter>

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.APP_CONTACT"/>
</intent-filter>

etc.

我做错了什么?

【问题讨论】:

您好,这可能对您有所帮助,请查看以下 URL:muetsch.io/how-to-receive-sharing-intents-in-flutter.html 【参考方案1】:

这取决于您使用的通讯录应用程序。

每台设备都可以附带制造商特定的联系人应用程序(例如三星联系人), 谷歌提供的应用程序(谷歌通讯录), 服务提供商可能会安装自己的联系人应用程序, 或者用户可能正在使用从 Google Play 安装的应用(例如 Contacts+)。

每个这样的应用程序可以选择通过其他应用程序可能捕获的意图启动编辑器,或者只是启动它自己的内置编辑器而不涉及意图系统。

如果有被捕获的意图,你可以通过查看LogCat,过滤到标签ActivityManager来找出它,它显示了所有被抛出的意图,所以你可以研究它来找出什么是您需要捕捉的意图细节。

【讨论】:

哇!杰出的!完美运行!【参考方案2】:

为了后代,在上面 marmor 的答案的基础上显示具体步骤:

$ adb logcat | grep ActivityTaskManager
[...]
04-01 18:09:27.306  1384  4229 I ActivityTaskManager: START u0 act=android.intent.action.INSERT_OR_EDIT typ=vnd.android.cursor.item/contact cmp=android/com.android.internal.app.ResolverActivity (has extras) from uid 10065
[...]

所以我所要做的就是将这个添加到我的AndroidManifest.xml

<intent-filter>
  <action android:name="android.intent.action.INSERT_OR_EDIT"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="vnd.android.cursor.item/contact"/>
</intent-filter>

【讨论】:

以上是关于让 Flutter 应用接受传入的意图的主要内容,如果未能解决你的问题,请参考以下文章

Flutte VS RN

我们用Flutter重写了一个React Native应用

VSCode Flutter 未检测到像素 3

flutte学习-编译模式

flutte学习-编译模式

Flutter 离线数据方案 Flutter_Data 包