2011-07-28 43 views
4

正在構建一個應用程序,該應用程序需要爲每個電話號碼定製一個自定義聯繫人字段(如果您想知道「白名單」)。將自定義字段添加到電話號碼

但是,我只找到了一種方法來保存每個聯繫人的自定義數據,與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(); 
} 

沒有人有任何的想法需要改變什麼,所以它可以節省的自定義字段的電話號碼,不聯繫嗎?

回答

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

由於聯繫人已被棄用且已被ContactsContract代替,因此您最好嘗試新的聯繫人。較新的API允許訪問多個帳戶並支持類似聯繫人的聚合。

對於新的Phone類,它定義了三列。

  • 串號DATA1
  • 整型DATA2
  • 字符串標籤DATA3

我認爲你可以使用的ContactsContract.CommonDataKinds.Phone

+0

答:'LABEL'用於用戶定義的數字描述,如果它不符合.data2選項。 B.我正在使用新的API。我導入... commonDataKinds.phone.-1。請在下次更仔細地閱讀問題。 – Eric

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 此代碼添加聯繫人......

可以添加其他類型的號碼和顯示名稱按要求。

+0

我一直在尋找這個..大,很清楚..謝謝你 –

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); 
相關問題