Android開發之獲取手機通訊錄

獲取手機通訊錄是Android最常用的小功能,今天自學到瞭,記下來,主要是通過系統自帶的內容提供者提供的數據,我們使用內容接收者獲取相應的數據到cursor中,然後獲取對應data表中的字段,相關字段代表什麼含義,隻能自己去查瞭。

下面是手機通訊錄列表的代碼,僅供參考:

package com.andy.phonecontact;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

/**
 * @author Zhang,Tianyou
 * @version 2014年11月18日 下午10:00:46
 */

public class MainActivity extends Activity {

	private ListView select_contact;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		select_contact = (ListView) findViewById(R.id.select_contact);

		List<Map> data = getContactInfo();
		select_contact.setAdapter(new SimpleAdapter(MainActivity.this, data,
				R.layout.contact_item_view, new String[] { "name", "phone" },
				new int[] { R.id.tv_name, R.id.tv_phone }));
	}

	/**
	 * 讀取手機裡的聯系人信息
	 * 
	 * @return
	 */
	private List<Map> getContactInfo() {
		// 把所有的聯系人放到list
		List<Map> list = new ArrayList<Map>();

		// 得到一個內容解析器
		ContentResolver resolver = getContentResolver();
		// 獲取聯系人表對應的內容提供者url raw_contacts表和data表
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri datauri = Uri.parse("content://com.android.contacts/data");
		
		Cursor cursor = resolver.query(uri, new String[] { "contact_id" },
				null, null, null);
		
		// 獲取contact_id 獲取聯系人id
		while (cursor.moveToNext()) {
			String contact_id = cursor.getString(0);

			if (contact_id != null) {
				// 具體的某個聯系人
				Map map = new HashMap();

				// 如果不為空 查詢對應data表的聯系人信息
				Cursor dataCursor = resolver.query(datauri, new String[] {
						"data1", "mimetype" }, "contact_id=?",
						new String[] { contact_id }, null);
				while (dataCursor.moveToNext()) {
					String data1 = dataCursor.getString(0);
					String mimetype = dataCursor.getString(1);
					System.out.println("data1 ==" + data1 + "mimetype == "
							+ mimetype);

					if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
						System.out.println("電話:" + data1);
						map.put("phone", data1);
					} else if ("vnd.android.cursor.item/name".equals(mimetype)) {
						System.out.println("姓名:" + data1);
						map.put("name", data1);
					}
				}

				list.add(map);
				// 釋放遊標
				dataCursor.close();
			}

		}
		cursor.close();
		return list;
	}

}

2 佈局文件 在activity_main.xml


    


3 ListView填充佈局contact_item_view.xml



    

    

4 添加對應的權限:

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。