使用内容提供器获取系统联系人

系统联系人是系统中共享出来的数据,可以通过内容提供器读取出来

  • 编写布局文件


    
    



  • 编写使用现有的内容提供器来读取系统联系人
public class MainActivity extends Activity {
    //ListView控件,来显示联系人列表
    ListView contactsView;
    //LIstView的适配器
    ArrayAdapter adapter;
    //存储联系人的集合
    List contactsList = new ArrayList();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        contactsView = (ListView) findViewById(R.id.contacts_view);
        //读取系统联系人
        readContacts();
        //创建适配器
        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contactsList);
        //为ListView适配适配器
        contactsView.setAdapter(adapter);
    }

    private void readContacts() {
        Cursor cursor = null;
        try {
            //查询联系人
            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null, null, null, null);
            while (cursor.moveToNext()) {
                //获取联系人姓名
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                //获取联系人手机号
                String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                contactsList.add(displayName + "\n" + number);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if (cursor != null) {
                cursor.close();
            }
        }
    }

}

ContactsContract.CommonDataKinds.Phone类已经帮我们做好了封装,提供了一个CONTENT_URI常量,而这个常量就是使用Uri.parse() 解析出来的
联系人姓名这一列对应的常量是ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
联系人手机号对应的常量是ContactsContract.CommonDataKinds.Phone.NUMBER

你可能感兴趣的:(使用内容提供器获取系统联系人)