Obtaining phone number from lookup URI

后端 未结 1 681
Happy的楠姐
Happy的楠姐 2021-01-12 17:30

I\'ve been trying to obtain a contact\'s phone number using their lookup URI, but I\'m not getting it to work.

Cursor myC = getContentResolver().query(lookup         


        
1条回答
  •  一向
    一向 (楼主)
    2021-01-12 18:13

    Can't guarantee this'll work for 4.0 because I haven't used it in a while but works fine on 2.3.3:

    To get the contactId, I first get the user to select a contact:

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

    When the user has selected a contact it comes back to this method:

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

    Which calls my static util class:

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

    Where contactId = lookupURI.getLastPathSegment();

    So complex for such a simple thing! :-(

    P.s. you may need this permission in your manifest:

     
    

    0 讨论(0)
提交回复
热议问题