根据内容访问者(接受者)取得系统联系人,取得系统的信息,联系人,图片等都有特定的Uri,取得联系人的uri:
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");注意格式,因为是获得系统资源,
肯定是需要权限的,所以在清单文件中要把权限添加好,这次将两个写在一起了!
主要的布局文件
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/bt_main_id" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="getData" android:text="获取手机联系人" /> <Button android:id="@+id/bt_main_xitong" android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:text="获取手机系统联系人" android:onClick="myData" /> </LinearLayout> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv_main_myTextOne"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv_main_myTextTwo"/> <ListView android:id="@+id/lv_main_list" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView>
当然还不能少了ListView的布局
<TextView android:id="@+id/tv_main_text1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" /> <TextView android:id="@+id/tv_main_text2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="3" /> <TextView android:id="@+id/tv_main_text3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="4" />
最主要的代码,代码含义都有注释就不多做详解了public class MainActivity extends AppCompatActivity { private ContentResolver contentResolver; private ListView listView; private Cursor cursorData; private Button bt_main_id; private String name; private List<Map<String, Object>> list = new ArrayList<>(); private Button bt_main_xitong; private TextView tv_main_myTextOne; private TextView tv_main_myTextTwo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得内容访问者 contentResolver = getContentResolver(); //本来为了性能问题应该提出去的,偷了点懒 listView = (ListView) findViewById(R.id.lv_main_list); bt_main_id = (Button) findViewById(R.id.bt_main_id); bt_main_xitong = (Button) findViewById(R.id.bt_main_xitong); //下面是TextView中的两个按钮 tv_main_myTextOne = (TextView) findViewById(R.id.tv_main_myTextOne); tv_main_myTextTwo = (TextView) findViewById(R.id.tv_main_myTextTwo); //点击获得手机联系人并绑定到Listview中 bt_main_id.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Cursor cursor = contentResolver.query(uri, null, null, null, null); while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("_id")); //取得姓名 name = cursor.getString(cursor.getColumnIndex("display_name")); Log.i("test", id + " " + name); Uri uriData = Uri.parse("content://com.android.contacts/raw_contacts/" + id + "/data"); cursorData = contentResolver.query(uriData, null, null, null, null); while (cursorData.moveToNext()) { //取得电话号码 String data = cursorData.getString(cursorData.getColumnIndex("data1")); //取得的类型,如果是(vnd.android.cursor.item/phone_v2)则是电话号码 String type_id = cursorData.getString(cursorData.getColumnIndex("mimetype")); if ("vnd.android.cursor.item/phone_v2".equals(type_id)) { Log.i("test", data + " " + type_id); Map<String, Object> map = new HashMap<String, Object>(); map.put("id", id); map.put("name", name); map.put("data", data); list.add(map); } } } //设置适配器 SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(), list, R.layout.moshi, new String[]{"id", "name", "data"}, new int[]{R.id.tv_main_text1, R.id.tv_main_text2, R.id.tv_main_text3}); listView.setAdapter(simpleAdapter); } }); //跳转系统联系人监听 bt_main_xitong.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //使用隐试跳转,跳转后可以携带数据返回 Uri uri = Uri.parse("content://contacts/people"); Intent intent1 = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent1, 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 1: if (data == null) { return; } //获取选择的联系人信息 Uri uri = data.getData(); String[] contacts = getPhoneContacts(uri); tv_main_myTextOne.setText(contacts[0]); tv_main_myTextTwo.setText(contacts[1]); break; } super.onActivityResult(requestCode, resultCode, data); } private String[] getPhoneContacts(Uri uri) { String[] contact = new String[2]; //得到ContentResolver对象 ContentResolver contentResolver = getContentResolver(); //取得电话本中开始一项的光标 Cursor cursor = contentResolver.query(uri, null, null, null, null); if (cursor != null) { cursor.moveToFirst(); //取得联系人姓名 int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);; contact[0] = cursor.getString(nameFieldColumnIndex); //取得电话号码 String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null); if (phone != null) { phone.moveToFirst(); contact[1] = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); // for (int i = 0; i < phone.getColumnCount(); i++) { // Log.i("test",phone.getColumnName(i)+""+phone.getString(i)); // } } phone.close(); cursor.close(); } else { return null; } return contact; } }