2011-12-21 11 views
6

Ho cercato di ottenere il numero di telefono di un contatto utilizzando l'URI di ricerca, ma non riesco a farlo funzionare.Ottenere il numero di telefono dall'URI di ricerca

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); 
        } 
       } 

dove lookupURI.toString() è questo URI: content://com.android.contacts/contacts/lookup/0r1-304846522C3052482C4A3442423C3248/1

Chiunque sa che cosa sto facendo male?

risposta

5

non può garantire questo lavorerò per 4,0 perché non ho usato in un po ', ma funziona bene su 2.3.3:

Per ottenere il ContactID, ho capito l'utente a selezionare un contatto :

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

Quando l'utente ha selezionato un contatto si ritorna a questo metodo:

@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())); 
     } 
    } 
} 

che chiama il mio statico util classe:

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; 
} 

Dove contactId = lookupURI.getLastPathSegment();

Così complesso per una cosa così semplice! :-(

P.S. potrebbe essere necessario questa autorizzazione nel vostro manifesto:

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