2011-12-21 98 views
6

我一直在嘗試使用其查找URI來獲取聯繫人的電話號碼,但我沒有得到它的工作。從查找URI獲取電話號碼

Cursor myC = getContentResolver().query(lookupURI, null, null, 
         null, null); 
       String phoneNumber; 
       if (myC.moveToFirst()) { 
        while (myC.moveToNext()) { 
         phoneNumber = myC.getString(myC 
           .getColumnIndex(Phone.NUMBER)); 
         Log.v("t", "phone number is: " + phoneNumber); 
        } 
       } 

其中lookupURI.toString()是這樣的URI:content://com.android.contacts/contacts/lookup/0r1-304846522C3052482C4A3442423C3248/1

任何人都知道我在做什麼錯?

回答

5

不能保證這會爲4.0工作,因爲我沒有在使用了一段時間,但在2.3.3正常工作:

要得到的ContactID,我第一次得到了用戶選擇聯繫人:

public void clickSelectContact(View v) { 
    Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
    startActivityForResult(i, CONTACTS_REQUEST_CODE); 
} 

當用戶選擇了一個接觸它回來這個方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == CONTACTS_REQUEST_CODE){ 
     if(resultCode == RESULT_OK){ 
      Uri uri = data.getData(); 
      System.out.println("uri: "+uri); 
      System.out.println("PHONE NUMBER: " + PhoneUtils.getContactPhoneNumber(this, uri.getLastPathSegment())); 
     } 
    } 
} 

其中要求我的靜態的Util類:

private static final String TAG = "PhoneUtils"; 

public static String getContactPhoneNumber(Context context, String contactId) { 
    int type = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE; 
    String phoneNumber = null; 

    String[] whereArgs = new String[] { String.valueOf(contactId), String.valueOf(type) }; 

    Log.d(TAG, "Got contact id: "+contactId); 

    Cursor cursor = context.getContentResolver().query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone._ID + " = ? and " + ContactsContract.CommonDataKinds.Phone.TYPE + " = ?", 
          whereArgs, 
          null); 

    int phoneNumberIndex = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER); 

    if (cursor != null) { 
     Log.d(TAG, "Returned contact count: "+cursor.getCount()); 
     try { 
      if (cursor.moveToFirst()) { 
       phoneNumber = cursor.getString(phoneNumberIndex); 
      } 
      } finally { 
       cursor.close(); 
      } 
    } 

    Log.d(TAG, "Returning phone number: "+phoneNumber); 
    return phoneNumber; 
} 

其中contactId = lookupURI.getLastPathSegment();

對於這麼簡單的事情太複雜了! :-(

附註:您可能需要您的清單此權限:

<uses-permission android:name="android.permission.READ_CONTACTS" />