Android Contact Picker With Checkbox

前端 未结 2 1048
臣服心动
臣服心动 2020-12-05 21:35

There are a lot of discussions going on about the same subject, but after spending 4 hours here, I could not find a valid description or a link to make a Contact Picker with

相关标签:
2条回答
  • 2020-12-05 22:27

    I use this code in onClick:

    long[] id = getListView().getCheckedItemIds();//  i get the checked contact_id instead of position
            phoneNumber = new String[id.length];
            for (int i = 0; i < id.length; i++) {
    
                phoneNumber[i] = getPhoneNumber(id[i]); // get phonenumber from selected id
    
            }
    
            Intent pickContactIntent = new Intent();
            pickContactIntent.putExtra("PICK_CONTACT", phoneNumber);// Add checked phonenumber in intent and finish current activity.
            setResult(RESULT_OK, pickContactIntent);
            finish();
    

    //

    private String getPhoneNumber(long id) {
        String phone = null;
        Cursor phonesCursor = null;
        phonesCursor = queryPhoneNumbers(id);
        if (phonesCursor == null || phonesCursor.getCount() == 0) {
            // No valid number
            signalError();
            return null;
        } else if (phonesCursor.getCount() == 1) {
            // only one number, call it.
            phone = phonesCursor.getString(phonesCursor
                    .getColumnIndex(Phone.NUMBER));
        } else {
            phonesCursor.moveToPosition(-1);
            while (phonesCursor.moveToNext()) {
    
                // Found super primary, call it.
                phone = phonesCursor.getString(phonesCursor
                        .getColumnIndex(Phone.NUMBER));
                break;
    
            }
        }
    
        return phone;
    }
    
    
    private Cursor queryPhoneNumbers(long contactId) {
        ContentResolver cr = getContentResolver();
        Uri baseUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,
                contactId);
        Uri dataUri = Uri.withAppendedPath(baseUri,
                ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
    
        Cursor c = cr.query(dataUri, new String[] { Phone._ID, Phone.NUMBER,
                Phone.IS_SUPER_PRIMARY, RawContacts.ACCOUNT_TYPE, Phone.TYPE,
                Phone.LABEL }, Data.MIMETYPE + "=?",
                new String[] { Phone.CONTENT_ITEM_TYPE }, null);
        if (c != null && c.moveToFirst()) {
            return c;
        }
        return null;
    }
    

    And the last onActivityResult of activity which you start PickContactsActivity

        // TODO Auto-generated method stub
        // super.onActivityResult(requestCode, resultCode, data);
    
        if (resultCode == RESULT_OK) {
    
            if (requestCode == Constants.REQUEST_CODE_PICK_CONTACT) {
    
    
                if (data != null) {
    
                    String[] temp = data.getStringArrayExtra("PICK_CONTACT");
    
                }
            }
    
        }
    
    }
    
    0 讨论(0)
  • 2020-12-05 22:27

    When using startActivityForResult(newActivity) in the newActivity you must make a call to setResult(RESULT_OK) followed by finish() to close the Activity. Optionally you can include an Intent in the call to setResult(RESULT_OK, intent). The call to setResult() will lead to calling your implementation of onActivityResult() where you can handle the result of the Activity. So in your case you would just create an Intenet and add your array list to it using one of the putExtra() methods. That Intent will then be passed to onActivityResult() where you can extract that information. See Intent and Activity for more information.

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