Flutter for Android developers文档解释了如何使Flutter应用程序接受传入的Android意图,并给出一个代码示例以接受Share意图。我已经复制了它,效果很好。
但是我现在试图让我的应用接受其他类型的意图,特别是编辑联系人意图,以便当我使用默认的Phone应用并单击联系人时,我的应用是建议完成操作。
我已经尝试了在谷歌搜索和搜索GitHub后可以找到的<intent-filter>
的所有可能组合,但是没有任何方法可以使它工作。列举几个:
<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.
我在做什么错?
取决于您使用的联系人应用程序。
每个设备都可以随附制造商特定的通讯录应用(例如Samsung Contacts),Google提供的应用(Google通讯录),服务提供商可以安装自己的通讯录应用,否则用户可能正在使用从Google Play安装的应用(例如Contacts +)。
每个此类应用都可能选择通过其他应用可能捕获的意图来启动编辑器,或者只是在不涉及意图系统的情况下启动其自己的内置编辑器。
[如果有意图被捕获,您可以通过检查LogCat并过滤到标签ActivityManager
来找出是什么,它会显示所有抛出在设备上的意图,因此您可以研究它以找出有什么意图。您需要了解的意图细节。
为后代,以上面马莫尔的答案为基础,以显示具体步骤:
$ 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>