2012-04-21 143 views
0

我想通過插入我的應用程序的聯繫人,但我無法弄清楚什麼應該是accountTypeaccountName如下值。如何將聯繫人添加到聯繫人表

ContentValues values = new ContentValues(); 
values.put(RawContacts.ACCOUNT_TYPE, accountType); 
values.put(RawContacts.ACCOUNT_NAME, accountName); 
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 
long rawContactId = ContentUris.parseId(rawContactUri); 


values.clear(); 
values.put(Data.RAW_CONTACT_ID, rawContactId); 
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
values.put(StructuredName.DISPLAY_NAME, "Mike Sullivan"); 
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,"1-800-111-411"); 
getContentResolver().insert(Data.CONTENT_URI, values); 

而且當我嘗試在accountTypeaccountName以下更改執行此代碼,我無法看到它的聯繫人。

values.put(RawContacts.ACCOUNT_TYPE, "acc_type"); 
values.put(RawContacts.ACCOUNT_NAME, "acc_name"); 

但似乎有些價值觀得到插入,當我搜索"Mike Sullivan"我得到的接觸,但沒有電話號碼。 請幫助

回答

2

是添加聯繫人數據庫的代碼,同時也將其返回是否添加了接觸或是不::::

//to save contact in Database 
public boolean SaveContact(Activity _activity,String name,String number) { 
    String MIMETYPE_RADUTOKEN = "vnd.android.cursor.item/radutoken"; 
    String szname = name,szMobile = number; 
    //Create a new contact entry! 
    String szToken = String.format("RADU_TOKEN_%d", System.currentTimeMillis()); 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    int rawContactInsertIndex = ops.size(); 

    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNTTYPE, null).withValue(RawContacts.ACCOUNT_NAME, null).build()); 

    //INSERT NAME 
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,rawContactInsertIndex).withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, szname).build()); 

    //INSERT PINLESSMAX MOBILE NUMBER 
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex).withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, szMobile).withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM).withValue(ContactsContract.Data.DATA3, "PinLessMax").build()); 

    // SAVE CONTACT IN BCR Structure 
    Uri newContactUri = null; 
    //PUSH EVERYTHING TO CONTACTS 
    try{ 
     ContentProviderResult[] res = _activity.getContentResolver().applyBatch(ContactsContract.AUTHORITY,ops); 
     if (res!=null && res[0]!=null) { 
     newContactUri = res[0].uri;  
    } 
    }catch (RemoteException e) { 
     // error 
     newContactUri = null; 
    } catch (OperationApplicationException e) { 
     // error 
     newContactUri = null; 
    } 
    if (newContactUri == null) { 
     return false; 
    } 
    boolean foundToken = false; 

    // IDENTIFY Contact based on name and token 
    String szLookupKey = ""; 
    Uri lkup = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, szname); 
    ContentResolver cr = _activity.getContentResolver(); 
    Cursor idCursor = _activity.getContentResolver().query(lkup, null, null, null, null); 
    // get all the names 
    while (idCursor.moveToNext()) { 
     String szId = idCursor.getString(idCursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String szName = idCursor.getString(idCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     szLookupKey = idCursor.getString(idCursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
     // for this contact ID, search the custom field 
     String tokenWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
     String[] tokenWhereParams = new String[]{szId, MIMETYPE_RADUTOKEN}; 
     Cursor tokenCur = cr.query(ContactsContract.Data.CONTENT_URI, null, tokenWhere, tokenWhereParams, null); 
     while (tokenCur.moveToNext()) { 
     String token = tokenCur.getString(tokenCur.getColumnIndex(ContactsContract.Data.DATA1)); 
     // CHECK THE TOKEN! 
     if (szToken.compareTo(token) == 0) { 
      tokenCur.close(); 
      foundToken = true; 
      break; 
     } 
     } 
     tokenCur.close(); 
     if (foundToken) break; 
    } 
    idCursor.close(); 
    return true; 
}//SaveContact() 
+0

非常感謝它的工作:) – 2012-04-22 11:35:12

+0

@Agareal桑卡如何發送多個聯繫人的聯繫人attatch單一的.vcf和發送到郵件..... – NagarjunaReddy 2012-10-08 15:03:31

0

您可以爲賬戶類型給空值和帳戶名,如果你不希望創建一個特定的帳戶

values.put(RawContacts.ACCOUNT_TYPE, null); 
values.put(RawContacts.ACCOUNT_NAME, null); 

在大多數它會創建一個默認的電話接觸設備的下接觸。

如果你想知道所有的設備提供的帳戶類型, 您可以使用下面的代碼

Account[] accountList = AccountManager.get(this).getAccounts(); 
for(int i = 0 ; i < accountList.length ; i++) { 
    System.out.println(accountList[i].type); 
} 

注:不同的OEM廠商的帳戶類型使用不同的名稱。

下面
+0

你,如果你想給你用「android.permission.GET_ACCOUNTS」權限獲得賬戶信息 – San 2012-04-22 01:20:35

+0

謝謝問題解決了:) – 2012-04-22 11:38:03

相關問題