2013-10-07 86 views
0

我正在使用類似下面的聯繫人選擇器來獲取聯繫人的ID。試圖將黑名單列入黑名單時,不匹配聯繫人ID

public void pickContact() { 
    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); 
    intent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers 
    startActivityForResult(intent, PICK_CONTACT_REQUEST); 
} 

然後我從上面使用這個返回的uri檢索聯繫人ID。並將其作爲參考存儲。

public static long getContactIdByUri(Context context, Uri uri) 
{ 
    Log.d(TAG, uri.toString()); 
    String[] projection = { Contacts._ID }; 
    Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); 
    try 
    { 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(Contacts._ID); 
     long id = -1; 

     if(idx != -1) 
     { 
      id = cursor.getLong(idx); 
     } 
     return id; 
    } 
    finally 
    { 
     cursor.close(); 
    } 
} 

後來當短信來取我的電話號碼,並根據我嘗試使用以下查找聯繫人ID上。

public static long getContactIdByPhoneNumber(Context context, String phoneNumber) { 
    ContentResolver contentResolver = context.getContentResolver(); 
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 
    String[] projection = new String[] { PhoneLookup._ID }; 
    Cursor cursor = contentResolver.query(uri, projection, null, null, null); 
    if (cursor == null) { 
     return -1; 
    } 
    int idx = cursor.getColumnIndex(PhoneLookup._ID); 
    long id = -1; 
    if(cursor.moveToFirst()) { 
     id = cursor.getLong(idx); 
    } 
    if(cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
    } 
    return id; 
} 

問題是這兩個id不匹配!

因此,基本上問題是我怎樣才能從聯繫人選擇器中獲得一個id,當使用PhoneLookup.CONTENT_FILTER_URI查找電話號碼時,我可以匹配它。我也可以使用它來獲取有關聯繫人的其他信息?

回答

0

從聯繫人選擇器返回的url是指ContactsContract.Data提供程序,該提供程序與ContactsContract.RawContacts聯合,該聯繫人又包含CONTACT_ID。

因此,使用下面的方法提取實際的聯繫人ID是微不足道的。

public static long getContactIdByDataUri(Context context, Uri uri) 
    { 
      String[] projection = new String[] { Data.CONTACT_ID }; 
      Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); 
      long id = -1; 
      if(cursor.moveToFirst()) { 
       id = cursor.getLong(0); 
      } 
      return id; 
    }