【问题标题】:Add a custom field to a phone number向电话号码添加自定义字段
【发布时间】:2011-07-28 03:31:08
【问题描述】:

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

但是,我只找到了一种为每个联系人保存自定义数据的方法,使用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();
}

有没有人知道需要更改什么以便它可以保存电话号码的自定义字段,而不是联系人?

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

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

    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 此代码用于添加联系人......

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        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);
        

        【讨论】:

          【解决方案4】:

          由于类 Contact 已弃用并已被ContactsContract 取代,您最好尝试新的。较新的 API 允许访问多个帐户并支持相似联系人的聚合。

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

          • 字符串 NUMBER DATA1
          • int TYPE DATA2
          • 字符串标签数据3

          我认为你可以使用ContactsContract.CommonDataKinds.Phone标签

          【讨论】:

          • A. LABEL 用于用户定义的数字描述,如果它不适合任何 .data2 选项。 B. 我正在使用新的 API。我导入了...commonDataKinds.phone.-1。下次请仔细阅读问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-05-23
          • 1970-01-01
          • 2011-11-15
          • 1970-01-01
          • 1970-01-01
          • 2020-12-10
          • 1970-01-01
          相关资源
          最近更新 更多