Pick contact directly from contact picker intent
I also had the same problem. Finally, I got rid of intermediate picker screen using below code,
Intent i=new Intent(Intent.ACTION_PICK);i.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);startActivityForResult(i, SELECT_PHONE_NUMBER);
In onActivityResult
get phone number as below
if (requestCode == SELECT_PHONE_NUMBER && resultCode == RESULT_OK) { // Get the URI and query the content provider for the phone number Uri contactUri = data.getData(); String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}; Cursor cursor = getContext().getContentResolver().query(contactUri, projection, null, null, null); // If the cursor returned is valid, get the phone number if (cursor != null && cursor.moveToFirst()) { int numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); String number = cursor.getString(numberIndex); // Do something with the phone number ... } cursor.close();}
Try the below code to pick contact:
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI); startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);
You can fetch the required information in onActivityResult as follows:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case RESULT_PICK_CONTACT: Cursor cursor = null; try { String phoneNo = null; String name = null; Uri uri = data.getData(); cursor = getContentResolver().query(uri, null, null, null, null); cursor.moveToFirst(); int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); int nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); phoneNo = cursor.getString(phoneIndex); name = cursor.getString(nameIndex); Log.e("Name and Contact number is",name+","+phoneNo); } catch (Exception e) { e.printStackTrace(); } break; } } else { Log.e("Failed", "Not able to pick contact"); }}
Here is a way to pick name, phone number from Contact in Kotlin
private fun pickEmergencyFromContacts() { val i = Intent(Intent.ACTION_PICK) i.type = ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE startActivityForResult(i, SELECT_PHONE_NUMBER)}override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) { val contactUri = data?.data ?: return val projection = arrayOf(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER) val cursor = requireContext().contentResolver.query(contactUri, projection, null, null, null) if (cursor != null && cursor.moveToFirst()) { val nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME) val numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER) val name = cursor.getString(nameIndex) val number = cursor.getString(numberIndex) // do something with name and phone } cursor?.close() }}companion object { private const val SELECT_PHONE_NUMBER = 111 ...}
Hope it help