将自定义字段添加到电话号码

时间:2011-07-28 03:31:09

标签: android android-contacts

正在为每个电话号码构建一个需要自定义联系人字段(“白名单”,如果您想知道)的应用程序。

但是,我只找到了一种方法,可以使用Data.RAW_CONTACT_ID为每个联系人保存自定义数据,但不会为每个电话号码保存。我尝试使用Phone._id,但我收到java.nullpointerexception错误。

这是我现在的代码:

try{ //phoneId = get Phone._ID from cursor
  ContentValues values = new ContentValues();                           
  values.put(Data.DATA1, "yes");
  int state = getContentResolver().update(Phone.CONTENT_URI, values, Phone._ID + " = " 
              + phoneId + " AND " +  Data.MIMETYPE + "='" + MIMETYPE_WHITELIST_CONTACT+"'", null);
         if (state == 0) {
             values.put(Phone._ID, phoneId);
             values.put(Data.DATA1, "yes");
             values.put(Data.MIMETYPE, MIMETYPE_WHITELIST_CONTACT);
                            getContentResolver().insert(Data.CONTENT_URI, values);
        }  
}catch (Exception e) {
    Toast.makeText(ChooseContactsActivity.this,  e.toString(), Toast.LENGTH_LONG).show();
}

有没有人知道需要更改哪些内容,因此可以保存电话号码的自定义字段,而不是联系人?

4 个答案:

答案 0 :(得分:2)

尝试使用此代码添加自定义标签号。 这是我的应用程序中的工作代码...

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

if (CustomLabelNo != null) {
            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, CustomLabelNo)
                    .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM)
                    .withValue(ContactsContract.CommonDataKinds.Phone.LABEL, "mayurbhola_newCustomTest").build());
        }

描述: CustomLabelNo:您要在联系人中添加的任何数字。 ops:这是ArrayList。

getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

[了解getContentResolver的参考链接]:http://developer.android.com/guide/topics/providers/content-providers.html 此代码用于添加联系人......

您可以根据需要添加其他类型的号码和显示名称。

答案 1 :(得分:0)

好吧,我明白了。也许有更好的解决方案,但这对我有用:

    values.put(Data.RAW_CONTACT_ID, contactId);
    values.put(Data.DATA1, phoneId);
    values.put(Data.DATA2, "1");
    values.put(Data.DATA5, phoneNum);
    values.put(Data.MIMETYPE, MIMETYPE_WHITELIST_CONTACT);
getContentResolver().insert(Data.CONTENT_URI, values);

当我查询时,我只需要添加phoneId以获得我需要的结果:

getContentResolver().query(Data.CONTENT_URI, {Data.DATA1, Data.DATA2},
 Data.RAW_CONTACT_ID + " = " + contactId +  " AND "  + 
    Data.DATA1 + " = " + phoneId + " AND "  +
            Data.MIMETYPE + "='" + MIMETYPE_WHITELIST_CONTACT+"'", null, null);

答案 2 :(得分:0)

This is how you do it if you want your custom label:

    Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION);
    intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
    intent.putExtra(ContactsContract.Intents.Insert.NAME, name);

    ArrayList<ContentValues> data = new ArrayList<>();                        
    ContentValues phonesRow = new ContentValues();

    phonesRow.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                                            phonesRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER,number);
    phonesRow.put(ContactsContract.CommonDataKinds.Phone.LABEL,type);                              phonesRow.put(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM);
data.add(phonesRow);

答案 3 :(得分:-1)

由于班级联系人已弃用且已被ContactsContract取代,因此您最好尝试使用新版本。较新的API允许访问多个帐户并支持类似联系人的聚合。

对于新的Phone类,它已定义了三列。

  • 字符串NUMBER DATA1
  • int TYPE DATA2
  • String LABEL DATA3

我认为您可以使用ContactsContract.CommonDataKinds.Phone

标签