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>
相关文章推荐
- android 跳转到通讯录并获取展示到页面 及android联系人信息获取
- android内容访问者+获取联系人信息
- android获取单个通讯录联系人信息并分享内容(短信邀请)
- Android中页面跳转,并传递信息
- Android 获取通讯录联系人信息(上)
- Android 获取通讯录联系人信息(上)
- android调用系统通讯录程序,获取联系人信息
- android开发基础:Intent与Bundle的使用,实现页面跳转及信息传递
- Android软件开发之获取通讯录联系人信息
- android关于crash时的提示信息,与页面跳转
- 爬取网页时自动获取网页编码信息,并对特殊的乱码页面(压缩过的网页内容)用gzip进行解码。
- Android软件开发之获取通讯录联系人信息
- Android 自定义切换卡功能,通过intent跳转到添加内容页面
- Android软件开发之获取通讯录联系人信息(二十九)
- Android软件开发之获取通讯录联系人信息(二十九)
- C#获取Word文档页数,并跳转到指定的页面获取页面信息
- Android软件开发之获取通讯录联系人信息(转)
- android获取通讯录信息
- 获取父子栏目内容的知识点总结:更多信息页面的信息内容获取
- (转)Android软件开发之获取通讯录联系人信息(二十九)