在微信中,手機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)) --->>讀取聯系人號碼的代碼
【附錄】