Android 內容訪問者 和 跳轉到通訊錄頁面獲取資訊
阿新 • • 發佈:2019-01-07
內容解析者ContentResolver
使用ContentResolver呼叫ContentProvider提供的介面,操作資料當外部應用需要對ContentProvider中的資料進行新增、刪除、修改和查詢操作時,可以使用ContentResolver 類來完成,要獲取ContentResolver 物件,
可以使用Activity提供的getContentResolver()方法。 ContentResolver 類提供了與ContentProvider類相同簽名的四個方法:
public Uri insert(Uri uri, ContentValues values)
該方法用於往ContentProvider新增資料。
public int delete(Uri uri, String selection, String[] selectionArgs)
該方法用於從ContentProvider刪除資料。
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
該方法用於更新ContentProvider中的資料。
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
該方法用於從ContentProvider中獲取資料。
佈局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main170208" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.myapplication.Main170208Activity"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="獲取聯絡人" android:onClick="getContacts"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳轉到聯絡人" android:onClick="myIntent"/> </LinearLayout> <ListView android:id="@+id/lv_main170208" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </LinearLayout>
獲取聯絡人的函式
public void getContacts(View view){ //獲取聯絡人raw_contacts //id name Uri uri=Uri.parse("content://com.android.contacts/raw_contacts"); Cursor cursor=cr.query(uri,null,null,null,null); while (cursor.moveToNext()){ int id=cursor.getInt(cursor.getColumnIndex("_id")); String name=cursor.getString(cursor.getColumnIndex("display_name")); Log.i("test",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)){ String s=name+":"+data1; lists.add(s); } } } ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1, lists); listView.setAdapter(adapter); }
思路:
1.點選跳轉到通訊錄介面2.獲取通訊錄姓名和手機號碼
3.回撥顯示姓名和手機號碼
1首先是跳轉到通訊錄介面
Uri uri=Uri.parse("content://contacts/people");
Intent intent=new Intent(Intent.ACTION_PICK,uri);
startActivityForResult(intent,0);
2.回撥函式:
/**
* 回撥函式
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 0:
if(data==null)
{
return;
}
//處理返回的data,獲取選擇的聯絡人資訊
Uri uri=data.getData();
String[] contacts=getPhoneContacts(uri);
String s=contacts[0]+":"+contacts[1];
lists.clear();
lists.add(s);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1, lists);
listView.setAdapter(adapter);
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
其中getPhoneContacts(uri)方法,因為手機的聯絡人和手機號並不再同一個資料庫中,所以我們需要分別做處理
private String[] getPhoneContacts(Uri uri){
String[] contact=new String[2];
//得到ContentResolver物件
ContentResolver cr = getContentResolver();
//取得電話本中開始一項的游標
Cursor cursor=cr.query(uri,null,null,null,null);
if(cursor!=null)
{
cursor.moveToFirst();
//取得聯絡人姓名
int nameFieldColumnIndex=cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
contact[0]=cursor.getString(nameFieldColumnIndex);
//取得電話號碼
String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
if(phone != null){
phone.moveToFirst();
contact[1] = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phone.close();
cursor.close();
}
else
{
return null;
}
return contact;
}
3.別忘了加許可權
<!--新增聯絡人的許可權-->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>