【问题标题】:How to add multiple number in existing contacts如何在现有联系人中添加多个号码
【发布时间】:2017-06-29 06:17:50
【问题描述】:

我可以使用这个更新联系人中的号码。

String where = ContactsContract.Data.CONTACT_ID + " = ? AND " +
            ContactsContract.Data.MIMETYPE + " = ? ";
String[] params = new String[] {contacts.getContactId(),
            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};
ops.add(ContentProviderOperation
                    .newUpdate(ContactsContract.Data.CONTENT_URI)
                    .withSelection(where, params)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"111111")
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,type_home))
                    .build());

但我还想在现有联系人中插入一个新号码。这个我试过了

ops.add(ContentProviderOperation.
             newInsert(ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,id)
            .withValue(ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "111111666")
            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
            .build());

但我无法在现有联系人中添加号码。

【问题讨论】:

    标签: android android-contentprovider android-contacts


    【解决方案1】:

    试试下面的功能添加联系人和呼叫功能,如

    addContact(getApplicationContext(),"Abhi","+910123456789","+919876543210","1122334455","ImDroid","Developer");
    

    添加联系人方法

    public void addContact(Context ctx, String displayname, String homenumber,
                    String mobilenumber, String worknumber,String companyname, String jobtitle) {
    
        ArrayList<ContentProviderOperation> contentProviderOperation = new
                ArrayList<ContentProviderOperation>();
    
        contentProviderOperation.add(ContentProviderOperation
                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                .build());
    
        //------------------------------ Names ---------------------------------
        if (displayname!= null) {
            contentProviderOperation.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                            displayname).build());
        }
    
        // -------------------- Mobile Number----------------------------------
        if (mobilenumber!= null) {
            contentProviderOperation.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                            mobilenumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                            ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
                    .build());
        }
    
        //---------------------- Home Numbers --------------------------------
        if (homenumber!= null) {
            contentProviderOperation.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                            homenumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                            ContactsContract.CommonDataKinds.Phone.TYPE_HOME)
                    .build());
        }
    
        //----------------------------- Work Numbers -------------------------
        if (worknumber!= null) {
            contentProviderOperation.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
                            worknumber)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
                            ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
                    .build());
        }
    
        // ---------------------------- Organization--------------------------
        if (!companyname.equals("") && !jobtitle.equals("")) {
            contentProviderOperation.add(ContentProviderOperation
                    .newInsert(ContactsContract.Data.CONTENT_URI)
                    .withValueBackReference(
                            ContactsContract.Data.RAW_CONTACT_ID, 0)
                    .withValue(
                            ContactsContract.Data.MIMETYPE,
                            ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
                    .withValue(
                            ContactsContract.CommonDataKinds.Organization.COMPANY,
                            companyname)
                    .withValue(
                            ContactsContract.CommonDataKinds.Organization.TYPE,
                            ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                    .withValue(
                            ContactsContract.CommonDataKinds.Organization.TITLE,
                            jobtitle)
                    .withValue(
                            ContactsContract.CommonDataKinds.Organization.TYPE,
                            ContactsContract.CommonDataKinds.Organization.TYPE_WORK)
                    .build());
        }
        // Asking the Contact provider to create a new contact
        try {
            ctx.getContentResolver()
                    .applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);
        } catch (Exception e) {
            e.printStackTrace();
            //show exception in toast
            Toast.makeText(ctx, "Exception: " + e.getMessage(),
                    Toast.LENGTH_SHORT).show();
        }
    }
    

    【讨论】:

    • 我不想添加新联系人,我想在现有联系人中添加号码,请正确阅读问题。
    • @Dheeraj 您只需在contentProviderOperation 中使用where clause 来获取特定联系人,然后根据该联系人的ContactId,您可以像上述功能一样更新联系人。
    • @Dheeraj 还传递了特定的 rawcontactId 而不是 0 并且还使用了 newUpdate,withSelection 参数而不是 newInsert,withValueBackReference
    • 确定这个ctx.getContentResolver() .applyBatch(ContactsContract.AUTHORITY, contentProviderOperation);你已经添加了吗?
    • 你在说什么?没有 .applyBatch 是否可以添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2017-12-07
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多