Android開發 讀取手機聯絡人
阿新 • • 發佈:2019-02-06
Android開發 讀取手機聯絡人
讀取手機聯絡人是很常見的需求,這裡簡單介紹一種方法,讀取出手機的聯絡人。
建立專案,在主佈局中新增一個listView,然後在Activity中實現。
需要新增讀取聯絡人的許可權。package com.example.contact; import java.util.ArrayList; import java.util.HashMap; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends ActionBarActivity { private ListView lvList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvList = (ListView) findViewById(R.id.lv_list); ArrayList<HashMap<String, String>> readContact = readContact(); // System.out.println(readContact); lvList.setAdapter(new SimpleAdapter(this, readContact, R.layout.contact_list_item, new String[] { "name", "phone" }, new int[] { R.id.tv_name, R.id.tv_phone })); } private ArrayList<HashMap<String, String>> readContact() { // 首先從raw_contacts中讀取聯絡人的額id("contact_id") // 再根據contact_id從data中查詢出相應的聯絡人姓名和電話 // 然後根據mimetype來區分聯絡人姓名和電話 ArrayList<HashMap<String, String>> list = new ArrayList(); Uri rawContactUri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri datatUri = Uri.parse("content://com.android.contacts/data"); // 從raw_contacts中讀取聯絡人的額id("contact_id") Cursor rawContacts = getContentResolver().query(rawContactUri, new String[] { "contact_id" }, null, null, null); if (rawContacts != null) { while (rawContacts.moveToNext()) { String contactId = rawContacts.getString(0); System.out.println("contactId==" + contactId); Cursor data = getContentResolver().query(datatUri, new String[] { "data1", "mimetype" }, "contact_id=?", new String[] { contactId }, null); if (data != null) { HashMap<String, String> map = new HashMap<String, String>(); while (data.moveToNext()) { String data1 = data.getString(0); String mimetype = data.getString(1); if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { map.put("phone", data1); } else if ("vnd.android.cursor.item/name".equals(mimetype)) { map.put("name", data1); } } list.add(map); data.close(); } } rawContacts.close(); // ontact_id從data中查詢出相應的聯絡人姓名和電話 } return list; } }
然後再寫一個item的佈局檔案,
檢查無誤即可執行。效果如下:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="TextView" android:textColor="#f00" android:textSize="20sp" /> <TextView android:id="@+id/tv_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="TextView" android:textColor="#000" android:textSize="18sp" /> </LinearLayout>