2015-05-14 50 views
-2

我想獲取保存的聯繫人ID,我用下面的方式來檢索它,但問題是它返回錯誤的ID。Android - 如何獲取保存的聯繫人ID

public static String addContact(FragmentActivity activity, String displayname, String mobilenumber, String homeemail) { 
    String DisplayName = displayname; 
    String MobileNumber = mobilenumber; 
    String homeemailID = homeemail; 
    int contactID = 0; 
    ArrayList<ContentProviderOperation> contentProviderOperation = new ArrayList<ContentProviderOperation>(); 

    contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build()); 

    // ------------------------------------------------------ Names 
    if (DisplayName != null) { 
     contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, DisplayName).build()); 
    } 

    // ------------------------------------------------------ Mobile Number 
    if (MobileNumber != null) { 
     contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, MobileNumber) 
       .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build()); 
    } 

    // ------------------------------------------------------ homeEmail 
    if (homeemailID != null) { 
     contentProviderOperation.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
       .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
       .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
       .withValue(ContactsContract.CommonDataKinds.Email.DATA, homeemailID) 
       .withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME).build()); 
    } 

    // Asking the Contact provider to create a new contact 
    try { 
     // activity.getContentResolver().applyBatch(ContactsContract.AUTHORITY, 
     // contentProviderOperation); 
     ContentProviderResult[] res = activity.getContentResolver().applyBatch(ContactsContract.AUTHORITY, contentProviderOperation); 
     Uri myContactUri = res[0].uri; 
     int lastSlash = myContactUri.toString().lastIndexOf("/"); 
     int length = myContactUri.toString().length(); 
     contactID = Integer.parseInt((String) myContactUri.toString().subSequence(lastSlash + 1, length)); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return contactID; 
} 

我認爲它傳遞了錯誤的聯繫數據uri.Please幫助我得到正確的聯繫人ID。

+0

肯定。是否有可能以這種方式獲得? – user3800832

回答

1

試試這個方法:

Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)); 

// query time 
Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); 

if (cursor.moveToFirst()) { 

    // Get values from contacts database: 
    contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID)); 
    name = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 
} 
+0

這工作:)但我怎麼能得到聯繫人ID沒有解析數字。我的意思是,我想獲得任何保存的聯繫人ID。 – user3800832

+0

'哇,這很酷!!!'你只能用兩種方法來做到這一點:通過'名字'和'號碼'。 – Gattsu

0

你不需要以這種方式得到id。在Uri類中有getLastPathSegment()方法。使用此代替

Uri myContactUri = res[0].uri; 
contactID = Ineger.parseInt(myContactUri.getLastPathSegment()); 

除此之外,這是獲取保存的聯繫人ID的正確方法。

+1

我之前使用過getLastPathSegment()方法。但它也返回了錯誤的聯繫人ID – user3800832

+0

@ user3800832你是指錯誤的聯繫人ID是什麼意思? – sakibmoon

+1

它會返回另一個聯繫人ID,因此無法從中保存聯繫人詳細信息。 – user3800832