How to import a Specific Contact's phone number?

自作多情 提交于 2020-01-06 04:49:06

问题


I'm trying to Read Phone number of a Contact Selected using Contact Picker. The Display Name works fine, But Phone number doesn't. Code:

//calling Contact Picker
public void CPick(View v){
        Intent intent=new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);
    }
    @Override
//Contact Picker here:
    protected void onActivityResult(int reqCode, int resultCode, Intent data){
        super.onActivityResult(reqCode,resultCode, data);

        if (reqCode==PICK_CONTACT){
            if(resultCode==AppCompatActivity.RESULT_OK){
                Uri contatctData=data.getData();
                Cursor c=getContentResolver().query(contatctData,null,null,null,null);
                if (c.moveToFirst()){
                    //String name=c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
//Above line works Fine

                    String name=c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
//Above line gives error on runtime "invalid column"
                    Toast.makeText(this,"U have picked:"+name,Toast.LENGTH_SHORT).show();



                }
            }

        }
    }

Anyhelp will be very Appreciated because I couldn't find relevant answer anywhere.


回答1:


If you want to allow the user to pick a phone-number, the best option is to use a PHONE-PICKER not a CONTACT-PICKER:

Intent intent = new Intent(Intent.ACTION_PICK, CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, PICK_PHONE);

...

protected void onActivityResult(int requestCode, int resultCode, Intent intent){
    if (requestCode == PICK_PHONE && resultCode == RESULT_OK){
        Uri phoneUri = intent.getData();
        Cursor cur = getContentResolver().query(phoneUri, new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }, null, null, null);
        if (cur != null && cur.moveToFirst()){
            String name = cur.getString(0);
            String number = cur.getString(1);
            Log.d("PHONE-PICKER", "User picker: " + name + " - " + number);
            cur.close();
        }
    }
}



回答2:


Try this method:

private void retrieveContactNumber() {

  String contactNumber = null;

  // getting contacts ID
  Cursor cursorID = getContentResolver().query(uriContact,
        new String[]{ContactsContract.Contacts._ID},
        null, null, null);

  if (cursorID.moveToFirst()) {

    contactId = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID));
  }

  cursorID.close();

  Log.d(TAG, "Contact ID: " + contactId);

  // Using the contact ID now we will get contact phone number
  Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},

        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
                ContactsContract.CommonDataKinds.Phone.TYPE + " = " +
                ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,

        new String[]{contactId}, null);

  if (cursorPhone.moveToFirst()) {
    contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
  }

  cursorPhone.close();

  Log.d(TAG, "Contact Phone Number: " + contactNumber);
}

You should see the contact number in your logcat.



来源:https://stackoverflow.com/questions/47270941/how-to-import-a-specific-contacts-phone-number

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!