从Android手机中提取所选联系人

时间:2013-04-17 15:27:56

标签: android android-contacts

我正在开发一个应用程序,我需要向用户显示所有联系人。 应该为用户提供选择多个联系人的选项,当他按下完成后,所有联系人都必须存储在数据库中。

任何人都可以帮助我使用代码来显示和提取所选择的联系人吗?{即使thr为多个同名的人也不能选择一个}

如果您可以让选定的联系人姓名显示在敬酒中{我将自己做DB部分},我将不胜感激......

Plz帮助.......

1 个答案:

答案 0 :(得分:0)

您需要使用CHOICE_MODE_MULTIPLE创建自己的联系人列表视图,并使用CheckTextView作为单个项目布局。以下是一个完整的例子。它在操作栏上有完成按钮。

public class PickContactsActivity extends ListActivity {
    private SimpleCursorAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getListView().setItemsCanFocus(false);
        getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                new String[] { ContactsContract.Contacts._ID, 
                ContactsContract.Contacts.DISPLAY_NAME},
                null, null, "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ") ASC");
        mAdapter = new SimpleCursorAdapter(this, 
                android.R.layout.simple_list_item_multiple_choice,
                cursor,
                new String[] { ContactsContract.Contacts.DISPLAY_NAME }, 
                new int[] { android.R.id.text1 }, 0);
        setListAdapter(mAdapter);
    }

    private List<Uri> pickContacts() {
        SparseBooleanArray a = getListView().getCheckedItemPositions();
        List<Uri> contacts = new ArrayList<Uri>();
        for (int i=0; i<a.size(); i++) {
            if (a.valueAt(i)) {
                Cursor c = (Cursor)mAdapter.getItem(a.keyAt(i));
                Long id = c.getLong(c.getColumnIndex(ContactsContract.Contacts._ID));
                contacts.add(ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id));
            }
        }
        return contacts;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case R.id.action_pick:
            List<Uri> contacts = pickContacts();
            StringBuilder sb = new StringBuilder("Selected Contacts\n");
            for(Uri c : contacts)
                sb.append(c).append("\n");
            Toast.makeText(this, sb.toString(), Toast.LENGTH_SHORT).show();
            return true;
        }
        return false;
    }
}

完成操作在 res / menu / main.xml 中定义

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/action_pick" android:showAsAction="ifRoom" android:title="Done"/>
</menu>

最后,请确保您拥有阅读联系人的权限。将其添加到 AndroidManifest.xml

 <uses-permission android:name="android.permission.READ_CONTACTS"/>

只需删除显示Toast消息的代码,然后使用Uri列表执行数据库操作。