Integrate my app with Contact

后端 未结 2 1712
清酒与你
清酒与你 2020-12-01 08:27

I would like to integrate my app with contact manager:

More precisely:

When I run Contact app in my phone and then I click on any avatar, a Popup (Quick Cont

相关标签:
2条回答
  • Hey guy finally I resolved this adding a custom field to ContactProvider and then QuickContactBadge will be link it for you.

    My code, for adding, delete a particular entry, delete all entry added by me.

     private static final String IM_LABEL = "Test protocol";
     private static final String LOG_TAG = "Log"
        /**
     * This method add my account under IM field at default Contact
     * application
     * 
     * Labeled with my custom protocol.
     * 
     * @param contentResolver
     *            content resolver
     * @param uid
     *            User id from android
     * @param account
     *            account name
     */
    public static void updateIMContactField(ContentResolver contentResolver,
            String uid, String account) {
    
        ContentValues contentValues = new ContentValues();
    
        contentValues.put(ContactsContract.Data.RAW_CONTACT_ID,
                Integer.parseInt(uid));
        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, IM_LABEL);
        contentValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL,
                ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM);
        contentValues.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
                IM_LABEL);
    
        contentValues.put(ContactsContract.CommonDataKinds.Im.DATA, account);
    
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
        ops.add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValues(contentValues).build());
    
        try {
            contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            Log.d(LOG_TAG, "Can't update Contact's IM field.");
        }
    }
    
    /**
     * This method remove IM entry at default Contact application.
     * 
     * @param contentResolver
     *            content resolver
     * @param uid
     *            User id from android
     * @param account
     *            account name
     */
    public static void removeIMContactField(ContentResolver contentResolver,
            String uid, String account) {
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    
        ops.add(ContentProviderOperation
                .newDelete(Data.CONTENT_URI)
                .withSelection(
                        ContactsContract.Data.RAW_CONTACT_ID + "=? and "
                                + ContactsContract.Data.MIMETYPE + "=? and "
                                + ContactsContract.CommonDataKinds.Im.DATA
                                + " = ?",
                        new String[] {
                                String.valueOf(uid),
                                ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,
                                account }).build());
    
        try {
            contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            Log.d(LOG_TAG, "Can't delete Contact's IM field.");
        }
    }
    
    /**
     * This method remove IM all entries at default Contact application 
     * 
     * @param contentResolver
     *            content resolver
     */
    public static void deleteAllIMContactField(ContentResolver contentResolver) {
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    
        ops.add(ContentProviderOperation
                .newDelete(Data.CONTENT_URI)
                .withSelection(
                        ContactsContract.Data.MIMETYPE
                                + "= ? and "
                                + ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL
                                + "= ?",
                        new String[] {
                                ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE,
                                IM_LABEL }).build());
    
        try {
            contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            Log.d(LOG_TAG,
                    "An exception occurred when deleting all IM field of Contact.");
        }
    }
    

    Hope some one found this useful.

    0 讨论(0)
  • 2020-12-01 09:09

    Here's how you're able to add Custom Field in the ContactsContract.IM.

    val contentProviderOperation = ArrayList<ContentProviderOperation>()
    val rawContactInsertIndex = contentProviderOperation.size
    
    contentProviderOperation.add(
        ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
            .build()
    )
    
    val customOperation = ContentProviderOperation
        .newInsert(ContactsContract.Data.CONTENT_URI)
        .withValueBackReference(
            ContactsContract.Data.RAW_CONTACT_ID,
            rawContactInsertIndex
        ).withValue(
            ContactsContract.Contacts.Data.MIMETYPE,
            ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
        ).withValue(
            ContactsContract.Contacts.Data.MIMETYPE,
            ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE
        ).withValue(
            ContactsContract.CommonDataKinds.Im.TYPE,
            ContactsContract.CommonDataKinds.Im.TYPE_CUSTOM
        ).withValue(
            ContactsContract.CommonDataKinds.Im.PROTOCOL,
            ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM
        ).withValue(
            ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL,
            "Custom IM Field"
        ).withValue(
            ContactsContract.CommonDataKinds.Im.DATA,
            "Custom IM Value"
        )
    
    contentProviderOperation.add(customOperation.build())
    
    contentResolver.applyBatch(ContactsContract.AUTHORITY, contentProviderOperation)
    
    0 讨论(0)
提交回复
热议问题