在 Android 中的联系人详细信息上显示应用程序图标

Posted

技术标签:

【中文标题】在 Android 中的联系人详细信息上显示应用程序图标【英文标题】:Show app icon on contact details in Android 【发布时间】:2020-09-13 01:54:48 【问题描述】:

我正在尝试在联系人详细信息中添加我的应用程序图标,以像快捷方式一样工作,我设法显示标题和副标题,但应用程序图标没有出现,我不明白如何显示他以及如何添加事件以在单击自定义单元格后导航到特定页面。 有人可以帮助我吗?

我的联系人管理器上有以下代码:

public static void addContact(Context context, MyContact contact)  
    ContentResolver resolver = context.getContentResolver();
    // add condition that you want to check

    ContentValues contentValues = new ContentValues();

    contentValues.put(ContactsContract.Data.RAW_CONTACT_ID,
            Integer.parseInt(contact.id));
    contentValues.put(ContactsContract.Data.MIMETYPE,
            ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE);
    contentValues.put(ContactsContract.CommonDataKinds.Im.TYPE,
            ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM);
    contentValues.put(ContactsContract.CommonDataKinds.Im.LABEL, "Title");
    contentValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL,
            ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM);
    contentValues.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
            "Title");

    contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, "Transferência");

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    ops.add(ContentProviderOperation
            .newInsert(ContactsContract.Data.CONTENT_URI)
            .withValue(Data.MIMETYPE, MIMETYPE)
            .withValues(contentValues).build());

    try 
        resolver.applyBatch(ContactsContract.AUTHORITY, ops);
     catch (Exception e) 
        String ex = e.getMessage();
    


`

以及 android manifest 上的以下服务

 <service
        android:name="com.[appPackage].SyncService"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.content.SyncAdapter" />
        </intent-filter>

        <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" />
        <meta-data android:name="android.provider.CONTACTS_STRUCTURE" android:resource="@xml/contacts" />
    </service>

有人可以帮助我吗?谢谢

【问题讨论】:

【参考方案1】:

首先,Contacts DB 上的每个 RawContact 都由特定的应用程序同步,所以如果你还没有这种情况,我建议你让你的应用程序插入自己的 RawContacts,而不是使用设备上现有的RawContacts 进行处理,因为它们可以随时被控制应用程序删除、编辑和重置。

现在要让您的应用程序的“操作”显示在本机联系人应用程序上,您需要声明您的联系人自定义 mimetype 和相关字段,您可以使用名为 @987654329 的特殊 xml 文件来执行此操作您在清单中声明的​​ @ 将不同的 DataKinds 映射到 DATA1、DATA2 等数据列。

然后,您需要有一个活动来捕捉用户点击您的自定义行时将触发的意图。 您也在 contacts.xml 文件中声明意图,然后您需要在 Activity 的清单块中设置类似的intent-filter,以便 Android 知道要启动哪个 Activity。

这里是官方文档:https://developer.android.com/guide/topics/providers/contacts-provider.html#CustomData & 这里:https://developer.android.com/guide/topics/providers/contacts-provider.html#SocialStreamDataKind

这里有一个教程:https://medium.com/@stephen.cty/android-account-sync-adapter-and-contacts-contract-database-983281be4847

再次,尝试确保该教程中的 myRawContactId 值指向您的应用创建的 RawContact,这将防止 Google 将来出现错误,弄乱您的自定义数据行

【讨论】:

以上是关于在 Android 中的联系人详细信息上显示应用程序图标的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉应用程序在地址簿中添加或删除或修改了新联系人及其在android中的详细信息

Android:在 Contact Uri 列表中显示所有有电话号码的联系人详细信息

Android 两个 Fragment listview 布局异常

访问 android 联系人所有详细信息的最佳方式

在android studio中使用firebase实时数据库检索当前登录用户的数据

将联系人保存到 android 的问题 - 附加代码