Selector de contactos de Android con casilla de verificación

Hay muchas discusiones sobre el mismo tema, pero después de pasar 4 horas aquí, no pude encontrar una descripción válida o un enlace para hacer un selector de contactos con la casilla de verificación.

Tengo una actividad conHECHO botón ylistview concheckbox. He conseguido mostrar los contactos correctamente. Ahora quiero devolver los números de teléfono de contacto seleccionados en unbundle (Creo que la mejor manera) para que pueda obtener la lista de números enonActivityResult(). No estoy seguro de la forma en que estoy siguiendo es correcto o no.

Aquí está mi código:

public class ContactPickerMulti extends ListActivity implements OnClickListener {

    // List variables
    public String[] Contacts = {};
    public int[] to = {};
    public ListView myListView;

    Button save_button;
    private TextView phone;
    private String phoneNumber;
    private Cursor cursor;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contacts_multi);

        // Initializing the buttons according to their ID
        save_button = (Button) findViewById(R.id.contact_done);

        // Defines listeners for the buttons
        save_button.setOnClickListener(this);

        Cursor mCursor = getContacts();
        startManagingCursor(mCursor);

        ListAdapter adapter = new SimpleCursorAdapter(
                this,
                android.R.layout.simple_list_item_multiple_choice,
                mCursor,
                Contacts = new String[] { ContactsContract.Contacts.DISPLAY_NAME },
                to = new int[] { android.R.id.text1 });

        setListAdapter(adapter);
        myListView = getListView();
        myListView.setItemsCanFocus(false);
        myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    }

    private Cursor getContacts() {
        // Run query
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String[] projection = new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };
        String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '"
                + ("1") + "'";
        String[] selectionArgs = null;
        String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
                + " COLLATE LOCALIZED ASC";

        return managedQuery(uri, projection, selection, selectionArgs,
                sortOrder);
    }

    public void onClick(View src) {
        Intent i;
        switch (src.getId()) {
        case R.id.contact_done:

            SparseBooleanArray selectedPositions = myListView
                    .getCheckedItemPositions();
            SparseBooleanArray checkedPositions = myListView
                    .getCheckedItemPositions();
            if (checkedPositions != null) {
                for (int k = 0; k < checkedPositions.size(); k++) {
                     if (checkedPositions.valueAt(k)) {
                          String name =
                                 ((Cursor)myListView.getAdapter().getItem(k)).getString(1);
                            Log.i("XXXX",name + " was selected");
                        }
                }
            }

            break;
        }

    }
}

Quiero enviar los números como matriz o lista. ¿Cuál es la mejor manera de hacer esto? Cualquier ayuda o camino al camino correcto es altamente apreciado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta