1. 用隱式Intent獲取聯系人
第一步、在需要讀取或者修改聯系人信息的前要在manifests文件下聲明讀寫權限,否則在后續的調用中會出錯
第二步采用ACTION_PICK為動作聲明一個隱式Intent。
bt_main_button = (Button) findViewById(R.id.bt_main_button);bt_main_button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent i = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); //聲明隱式Intent,從聯系人中獲取一個返回信息startActivityForResult(i,RESULT_CANCELED);}});
第三步、在onActivityResult中獲取返回的URI,該URI是指向用戶所選的聯系人的定位符,通過該URI可以查詢聯系人數據庫從而提取出聯系人id與姓名。而通過聯系人id可以進一步在數據庫中提取出聯系人的電話。其中聯系人名字和id要在ContactsContract.Contacts中獲取,而電話則ContactsContract.CommonDataKinds.Phone中獲取。
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == RESULT_CANCELED){Uri contactUri = data.getData(); //該數據URI是一個指向用戶所選聯系人的定位符Cursor c =getContentResolver().query(contactUri, null, null, null, null); //查詢聯系人數據庫,獲得一個可用的Cursorif(c.moveToFirst()) { //將Cursor移動到第一條記錄String suspect = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); //通過Cursor c獲得聯系人名字String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));//通過Cursor c獲得聯系人idCursor c2 =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);//在ContactsContract.CommonDataKinds.Phone.CONTENT_URI里,// 通過上面獲得的聯系人id獲得一個新的Cursor c2c2.moveToFirst();String phonenum = c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //通過Cursor c2獲得聯系人電//給控件賦值tv_main_view.setText(suspect+" "+phonenum);c2.close(); //關閉Cursor c2c.close(); //關閉Cursor c}}}
2. 通過ContentProvider得到手機上所有聯系人的信息
第一步 在manifests文件下聲明讀寫權限 與隱式intent一樣的
第二步 得到內容訪問者
ContentResolver cr=getContentResolver();
第三步 得到手機中所有的聯系人的信息并展示在listview中 并得到你選中的聯系人信息展示在Testview中
List namelist=new ArrayList<>();List tellist=new ArrayList<>();//ContentProvider得到所有聯系的信息public void getContacts(View view){//獲取聯系人Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");Cursor cursor= cr.query(uri,null,null,null,null);while(cursor.moveToNext()){//得到聯系人是idint id=cursor.getInt(cursor.getColumnIndex("_id"));String name=cursor.getString(cursor.getColumnIndex("display_name"));// Log.i("text", "getContacts: "+id+name);//獲取相對應的聯系人的數據(電話號碼)Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");Cursor cursorData=cr.query(uriData,null,null,null,null);while (cursorData.moveToNext()){String data1=cursorData.getString(cursorData.getColumnIndex("data1"));//int type=cursorData.getInt(cursorData.getColumnIndex("mimetype_id"));//得到數據的類型(郵件地址,電話號碼等等)這里我們只需得到電話號碼String type=cursorData.getString(cursorData.getColumnIndex("mimetype"));if("vnd.android.cursor.item/phone_v2".equals(type)){namelist.add(name);tellist.add(data1);}}}List> date=new ArrayList<>();for (int i = 0; i map=new HashMap<>();map.put("name",namelist.get(i));map.put("tel",tellist.get(i));date.add(map);}SimpleAdapter adpater=new SimpleAdapter(this,date,R.layout.item_list,new String[]{"name","tel"},new int[]{R.id.tv_list_name,R.id.tv_list_apont} );lv_main_view.setAdapter(adpater);lv_main_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView parent, View view, int position, long id) {tv_main_view.setText(namelist.get(position)+" "+tellist.get(position));}});}
兩種方式結合源代碼:
java代碼:
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.database.Cursor;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private ContentResolver cr;
List namelist=new ArrayList<>();
List tellist=new ArrayList<>();
private ListView lv_main_view;
private TextView tv_main_view;
private Button bt_main_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_main_view = (ListView) findViewById(R.id.lv_main_view);
tv_main_view = (TextView) findViewById(R.id.tv_main_view);
bt_main_button = (Button) findViewById(R.id.bt_main_button);
bt_main_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {Intent i = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); //聲明隱式Intent,從聯系人中獲取一個返回信息startActivityForResult(i,RESULT_CANCELED);}});cr = getContentResolver();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == RESULT_CANCELED){Uri contactUri = data.getData(); //該數據URI是一個指向用戶所選聯系人的
定位符
Cursor c =getContentResolver().query(contactUri, null, null, null, null); //查詢聯
系人數據庫,獲得一個可用的Cursor
if(c.moveToFirst()) { //將Cursor移動到第一條記錄String suspect = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); //通過Cursor c獲得聯系人名字String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));//通過Cursor c獲得聯系人idCursor c2 =getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);//在ContactsContract.CommonDataKinds.Phone.CONTENT_URI里,// 通過上面獲得的聯系人id獲得一個新的Cursor c2c2.moveToFirst();String phonenum = c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); //通過Cursor c2獲得聯系人電//給控件賦值tv_main_view.setText(suspect+" "+phonenum);c2.close(); //關閉Cursor c2c.close(); //關閉Cursor c}}}public void getContacts(View view){//獲取聯系人Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");Cursor cursor= cr.query(uri,null,null,null,null);while(cursor.moveToNext()){//得到聯系人是idint id=cursor.getInt(cursor.getColumnIndex("_id"));String name=cursor.getString(cursor.getColumnIndex("display_name"));// Log.i("text", "getContacts: "+id+name);//獲取相對應的聯系人的數據(電話號碼)Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");Cursor cursorData=cr.query(uriData,null,null,null,null);while (cursorData.moveToNext()){String data1=cursorData.getString(cursorData.getColumnIndex("data1"));//int type=cursorData.getInt(cursorData.getColumnIndex("mimetype_id"));//得到數據的類型(郵件地址,電話號碼等等)這里我們只需得到電話號碼String type=cursorData.getString(cursorData.getColumnIndex("mimetype"));if("vnd.android.cursor.item/phone_v2".equals(type)){namelist.add(name);tellist.add(data1);}}}List> date=new ArrayList<>();for (int i = 0; i map=new HashMap<>();map.put("name",namelist.get(i));map.put("tel",tellist.get(i));date.add(map);}SimpleAdapter adpater=new SimpleAdapter(this,date,R.layout.item_list,new String[]{"name","tel"},new int[]{R.id.tv_list_name,R.id.tv_list_apont} );lv_main_view.setAdapter(adpater);lv_main_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView parent, View view, int position, long id) {tv_main_view.setText(namelist.get(position)+" "+tellist.get(position));}});}
xml代碼:
真機效果圖:


看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170217/103298.html
文章列表