2015-05-14 3 views
-2

Я хочу получить сохраненный идентификатор контакта, и я использовал следующий способ его извлечения, но проблема в том, что он возвращает неверный идентификатор.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.Пожалуйста, помогите мне получить правильный идентификатор контакта.

+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

этот рабочий :) но как я могу получить идентификатор контакта без разбора номера. Я имею в виду, я хочу получить любой сохраненный идентификатор контакта. – user3800832

+0

'wow, это круто !!!' Вы можете сделать это всего двумя способами: по 'name' и' number'. – Gattsu

0

Вам не нужно вводить идентификатор таким образом. Существует метод getLastPathSegment() в классе Uri. Используйте это вместо

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

Кроме этого, это правильный способ получить сохраненный контактный идентификатор.

+1

Я использовал метод getLastPathSegment() раньше. но он также возвращает неверный идентификатор контакта – user3800832

+0

@ user3800832 Что вы подразумеваете под неправильным идентификатором контакта? – sakibmoon

+1

он возвращает другой идентификатор контакта, поэтому он не может получить сохраненные контактные данные. – user3800832

Смежные вопросы