Selecting a number from user with multiple numbers when using the contact picker

前端 未结 4 488
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-15 09:27

I\'m trying to allow a user to select a phone number from a contact using the contact picker. However, right now all the examples I see online show how you can select a con

4条回答
  •  悲&欢浪女
    2020-12-15 10:07

    I was able to do this by creating a second dialog which shows all the phone numbers associated with a contact. First, call this somewhere in your code:

    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, REQUEST_PICK_CONTACT);
    

    Then in onActivityResult() use this to decide if the selected contact has multiple phone numbers, and display a dialog if so:

    Uri result = data.getData();
    Log.v(TAG, "Got a result: " + result.toString());
    
    // get the contact id from the Uri
    String id = result.getLastPathSegment();
    
    // query for phone numbers for the selected contact id
    c = getContentResolver().query(
        Phone.CONTENT_URI, null,
        Phone.CONTACT_ID + "=?",
        new String[]{id}, null);
    
    int phoneIdx = c.getColumnIndex(Phone.NUMBER);
    int phoneType = c.getColumnIndex(Phone.TYPE);
    
    if(c.getCount() > 1) { // contact has multiple phone numbers
        final CharSequence[] numbers = new CharSequence[c.getCount()];
        int i=0;
        if(c.moveToFirst()) {
            while(!c.isAfterLast()) { // for each phone number, add it to the numbers array
                String type = (String) Phone.getTypeLabel(this.getResources(), c.getInt(phoneType), ""); // insert a type string in front of the number
                String number = type + ": " + c.getString(phoneIdx);
                numbers[i++] = number;
                c.moveToNext();
            }
            // build and show a simple dialog that allows the user to select a number
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle(R.string.select_contact_phone_number_and_type);
            builder.setItems(numbers, new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    String number = (String) numbers[item];
                    int index = number.indexOf(":");
                    number = number.substring(index + 2);
                    loadContactInfo(number); // do something with the selected number
                }
            });
            AlertDialog alert = builder.create();
            alert.setOwnerActivity(this);
            alert.show();
    
        } else Log.w(TAG, "No results");
    } else if(c.getCount() == 1) {
        // contact has a single phone number, so there's no need to display a second dialog
    }
    

    I know this is an old question but I hope it helps.

提交回复
热议问题