在微信中,手機QQ中你會發現軟件讀取手機通訊錄這個功能,這個功能使得軟件更好的與手機聯系人綁定,從而達到分享,撥打電話,讀取用戶信息等操作。下面我們將通過一個demo實現這個功能
首先我們看一下效果圖:
-----------------------------------------------------------【正題部分】-----------------------------------------------
【開發環境】Android Stdio 1.1.0
【分析】
軟件中含有一個控件ListView,這個控件可謂是Android程序設計中最最最最實用的一個控件了,自定義item的布局,控件中的數據來源於你的手機通訊錄的內容,所以適配器選擇:CursorAdapter或者BaseAdapter,小編使用的是CursorAdapter,取得數據並且賦予item中,demo中還需要重要的一點就是獲取讀取手機通訊錄的權限
【編碼】
(1)布局方面的代碼小編不予細解,具體看文章下面的demo
(2)聯系人信息實體類
package cn.edu.bzu.contacts_listview;
/**
* Created by monster on 2015/4/26.
* 聯系人實體類
* 功能:實現了People聯系人實體類
*/
public class myFile {
public String PeopleName;
public int ImgId;
public String PeopleNumber;
public myFile(String peopleName, int imgId, String peopleNumber) {
super();
PeopleName = peopleName;
ImgId = imgId;
PeopleNumber = peopleNumber;
}
public myFile() {
super();
}
}
(3)聯系人列表的適配器
/**
* Created by monster on 2015/4/26.
*/
public class PeopleListAdapter extends CursorAdapter {
private LayoutInflater mInflater;//定義LayoutInflater對象
public PeopleListAdapter(Context context, Cursor c) {
super(context, c);
mInflater=LayoutInflater.from(context);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
//初始化每一個item的View
return mInflater.inflate(R.layout.activity_list_item,parent,false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//設置Item的布局效果
ViewHolder viewHolder=new ViewHolder();
viewHolder.PeopleImage=(ImageView)view.findViewById(R.id.IvNews);
viewHolder.PeopleName=(TextView)view.findViewById(R.id.TvNewsTitle);
viewHolder.PeopleNumber=(TextView)view.findViewById(R.id.TvNewsInfo);
//從手機聯系人中讀取數據
viewHolder.PeopleImage.setBackgroundResource(R.mipmap.ic_launcher);
viewHolder.PeopleName.setText(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
viewHolder.PeopleNumber.setText(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
}
class ViewHolder{
ImageView PeopleImage;
TextView PeopleName;
TextView PeopleNumber;
}
}
(4)書寫MainActivity.java
package cn.edu.bzu.contacts_listview;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView Lv;
private PeopleListAdapter adapter;
private Cursor cursor;//定義用來存儲需要顯示的對象的cursor
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();//控件實例化
setData();//設置數據
setLv();//綁定適配器
}
private void setLv() {
adapter=new PeopleListAdapter(MainActivity.this,cursor);
Lv.setAdapter(adapter);
}
private void setData() {
//通過getContentResolver獲取手機中聯系人信息
cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
}
private void findView() {
Lv=(ListView)findViewById(R.id.LV);
}
}
(5)在清單文件中設置權限
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
----------------------------------------------------【總結部分】------------------------------------------------------
【總結】
適配器中繼承的是CursorAdapter適配器:必須實現的三個方法為:
public PeopleListAdapter(Context context, Cursor c)
public View newView(Context context, Cursor cursor, ViewGroup parent) --->>初始化每一個item的View
public void bindView(View view, Context context, Cursor cursor) ---->>設置Item的布局效果
(讀取手機聯系人的數據)
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) --->>讀取聯系人姓名的代碼
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) --->>讀取聯系人號碼的代碼
【附錄】

