Android: Contact Picker Intent | Unable to create an instance of type Uri

I am trying to select contacts with only a phone number. And I follow this code

static final int PICK_CONTACT_REQUEST = 1; // The request code ... private void pickContact() { Intent pickContactIntent = new Intent(Intent.ACTION_PICK, new Uri("content://contacts")); pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); } 

But unfortunately, this shows an error: Cannot instantiate the type Uri

Actually, I have another working code that works fine, but crashes when choosing email contacts. I only need phone numbers.

 Intent intentContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); intentContact.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivityForResult(intentContact, PICK_CONTACT); 

and with onReceive() , this method is called

 public void getContactInfo(Intent intent) { ContentResolver cr = getContentResolver(); cursor = cr.query(intent.getData(), null, null, null, null); while (cursor.moveToNext()) { String contactId = cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts._ID)); if (Integer .parseInt(cursor.getString(cursor .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); while (phones.moveToNext()) { phoneNumber = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close(); } else { snipp.showAlertDialog(getApplicationContext(), "No Number", "Cannot read number", false); } } cursor.close(); } 
+7
source share
2 answers

This works for me:

 private void pickContact() { Intent pickContactIntent = new Intent( Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI ); pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); } 

Edit:

Your onActivityResult() should look like this:

 @Override public void onActivityResult( int requestCode, int resultCode, Intent intent ) { super.onActivityResult( requestCode, resultCode, intent ); if ( requestCode == PICK_CONTACT_REQUEST ) { if ( resultCode == RESULT_OK ) { Uri pickedPhoneNumber = intent.getData(); // handle the picked phone number in here. } } } } 
+10
source

Use Uri.parse () instead. You cannot directly install Uri

+5
source

All Articles