【问题标题】:Programmatically added Contact is not visible in Android [duplicate]以编程方式添加的联系人在 Android 中不可见 [重复]
【发布时间】:2012-04-23 07:11:40
【问题描述】:

可能重复:
How can I programmatically add a contact?

借助 Google 搜索,我能够在我的 Android 应用程序中添加联系人。虽然这可行,但我无法在电话联系人列表(电话簿)中看到添加的联系人。

你能帮我解决这个问题吗?我不知道在哪里看,这可能是版本控制问题吗?如果遇到此问题的任何人愿意帮助我,我将不胜感激。

我已按照this example 设置我的代码。

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

    使用以下方法将新联系人插入您的电话簿:

    public void insert(String lastName, String firstName, String phoneNumber, String photo_uri)
    {
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    
        Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
        builder.withValue(RawContacts.ACCOUNT_TYPE, null);
        builder.withValue(RawContacts.ACCOUNT_NAME, null);
        ops.add(builder.build());
    
        // Name
        builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
        builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
        builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
        builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastName);
        builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstName);
        ops.add(builder.build());
    
        // Number
        builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
        builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
        builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber);
        builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
        ops.add(builder.build());
    
        // Picture
        try
        {
            Bitmap mBitmap = Media.getBitmap(context.getContentResolver(), Uri.parse(photo_uri));
    
            ByteArrayOutputStream image = new ByteArrayOutputStream();
            mBitmap.compress(Bitmap.CompressFormat.JPEG , 100, image);
    
            builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
            builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
            builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
            builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray());
            ops.add(builder.build());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    
        // Add the new contact
        ContentProviderResult[] res;
        try
        {
            res = KramerApplication.getInstance().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
            if (res != null && res[0] != null)
            {
                String uri = res[0].uri.getPath().substring(14);
                return new Integer(uri).intValue(); // Book ID
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    

    用法:

    int book_id = insert("Doe", "John", "111-222-333", "content://com.my.package/drawable/photo");

    book_id 是您的条目的行 ID。

    【讨论】:

    • 对给定代码的注释或解释将对读者有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2018-03-14
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多