在 Android KitKat 4.4.2 中向联系人添加自定义 Connection/Action 时的特殊情况

Special case when adding a custom Connection/Action to Contacts in Android KitKat 4.4.2

首先感谢大家的帮助。我每天都使用 Whosebug 来解决我遇到的几乎每一个代码问题,这是一个拥有优秀人才的优秀平台。

我的问题:

我最初的目标是向 Android 上的联系人添加自定义连接(操作按钮),并在我的应用程序中执行自定义操作(示例:使用我的应用程序调用)。由于像这样的帖子,我已经设法在大多数设备上使用帐户和同步提供程序完成了这项工作,我的代码类似于 Rene Ummels 和 c99.org 教程的回复:

Display the app icon if the contact is associated with the application in phone address book

该操作在 Android 4.0.4、4.3.1 和 4.4.3 的三个测试设备中完美运行,显示如下:

问题是,在我的测试设备中,有一个无法正常工作。设备详细信息(上)和不起作用的(下):

基本上,在我看来这个版本的 Android (4.4.2) 有不同的方式来处理连接。

在这种情况下,我的自定义应用程序图标就像一个死按钮,你点击它什么也没做。我知道可以让它执行操作,因为它旁边的 Facebook 按钮可以使用,它会将您带到该联系人的 Facebook 提要。

我的问题是:如何激活该自定义应用程序按钮以启动我的 Activity 在此设备中的预期?

有没有人遇到同样的问题?我在网上搜索也没有找到类似的东西。

非常感谢,我希望我提供了足够的细节并且有人可以引导我回答。

解决了。

据我所知,问题出在命名约定上。

相关位在我的 ContactsSyncAdapter 中,看起来像这样的部分:

builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
        builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
        builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/com.example.precall.contact_activity");

我所要做的就是将 "contact_activity" 名称(我想通过按钮访问的布局)更改为 "profile",然后重命名我构建的 contact_activity.xml至 profile.xml。看起来是这样的:

builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
        builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
        builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/com.example.precall.profile");

(当然我必须更改清单以适应此编辑)

据我所知,除非我对原因完全错误,否则这是一个没有出现在文档中的命名约定,它只是通过示例假设它应该这样命名。

在我看来,在这种特殊情况下,您必须以某种方式命名您的 .xml ,这对我来说似乎很便宜而且很难理解,否则它不会成为 KitKat 中的按钮,只是一个死的图片。

无论如何,我希望这对遇到同样令人沮丧的问题的人有所帮助。

:D