Android Contact Picker With Checkbox

前端 未结 2 1051
臣服心动
臣服心动 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");
    
                }
            }
    
        }
    
    }
    

提交回复
热议问题