您的位置:首页 > 移动开发 > Android开发

Android 内容访问者 和 跳转到通讯录页面获取信息

2017-02-08 17:03 435 查看


内容解析者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);

}

 


Android跳转到通讯录获取用户名称和手机号码

思路: 

1.点击跳转到通讯录界面 
2.获取通讯录姓名和手机号码 

3.回调显示姓名和手机号码

1首先是跳转到通讯录界面

Uri uri=Uri.parse("content://contacts/people");

4000
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: