在Android中的联系方式上显示应用程序图标

问题描述 投票:0回答:1

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

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

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清单上的以下服务

 <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>

有人可以帮助我吗? Thx

java android android-studio android-contacts
1个回答
0
投票

首先,RawContact DB上的每个Contacts都是由特定应用程序同步的,因此,如果您不是这种情况,我建议您让您的应用程序插入自己的RawContacts,而不要弄乱设备上存在RawContacts,因为控制应用可以随时删除,编辑和重置它们。

现在要在本机联系人应用程序上显示您应用程序的“ 动作”,您需要声明联系人自定义mimetype和相关字段,并使用一个特殊的XML文件contacts.xml进行声明,在清单中,该清单将不同的DataKinds映射到Data列,例如DATA1,DATA2等。

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

这里是官方文档: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将来的错误将您的自定义数据行弄乱

热门问题
推荐问题
最新问题