ContentProvider获取系统的电话号码绑定到ListView以及跳转通讯录获区联系人信息绑定到前台。
来源:互联网 发布:双十一成交额最新数据 编辑:程序博客网 时间:2024/05/29 17:04
说白了就是通过内容提供者(ContentProvider)访问数据库的联系人数据库表,通过多表联查实现提取联系人的姓名以及电话号码,同时将数据库的联系人绑定到List集合中,展示在List中,大概就是这样.
直接上代码
通过按钮的onClick直接调用MainActivity中写的方法.
public void getContents(View view){ //获取联系人raw_content //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)){ Map<String,Object> map = new HashMap<String,Object>(); map.put("id",id+""); map.put("name",name+""); map.put("number",data1+""); list.add(map); Log.i("test"," "+data1+":"+type); } } } //适配器 adapter = new SimpleAdapter(this, list, R.layout.item_list,new String[]{"id","name","number"},new int[]{R.id.id,R.id.name,R.id.number}); listView.setAdapter(adapter); }适配器就不用说了吧,我这里用的是SimpleAdapter,同时也可以根据自己的喜欢用不同的适配器.
注意这里要加三个权限:
<!--添加联系人的权限--> <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> <!--获取通讯录权限--> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />配置完清单文件后就可以实现吧联系人绑定到listView 中了.
然后还有就是点击按钮跳转到系统通讯录页面并拿到 相应绑定联系人到List中
还是跟上面一样, 通过按钮的onClick直接调用MainActivity中写的方法.
首先要做的是跳转到通讯录页面
public void getContent(View view){ Uri uri = Uri.parse("content://contacts/people"); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, 0); }
然后跳转联系人列表的回调函数
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ case 0: if(data==null) { return; } //处理返回的data,获取选择的联系人信息 Uri uri=data.getData(); String contact[]=getPhoneContacts(uri); Map<String,Object> map = new HashMap<String,Object>(); map.put("name",contact[0]); map.put("number",contact[1]); list.clear(); list.add(map); adapter = new SimpleAdapter(this, list, R.layout.item_list,new String[]{"id","name","number"},new int[]{R.id.id,R.id.name,R.id.number}); listView.setAdapter(adapter); break; } super.onActivityResult(requestCode, resultCode, data); }然后在根据相应id查询data表中的数据,拿到联系人的,名字以及电话号码
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(); //取得联系人姓名 contact[0]=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); //取得电话号码 //现获取id String contactId = cursor.getString(cursor.getColumnIndex("_id")); //根据id查询data表中的数据 Cursor cursorData = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null); if(cursorData != null){ cursorData.moveToFirst(); contact[1] = cursorData.getString(cursorData.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } } return contact; }
写完这两个方法后就可以根据自己点击联系人的光标拿到对应得名字以及信息
PS:大概就是这样了,其实也没什么好说的,就是通过按钮onClick直接调用方法进行对联系人表的多表联查
拿到对应自己想拿到的信息,然后跳转到通讯人页面拿值也跟上面的差不多,只不过要拿到对象的联系人id
处理返回的data获取选择的联系人信息,然后查询获取的id对应得联系人数据,实例化适配器,把数据全部给Lisy
设置适配器,就可以把跳转通讯录选择点击的联系人信息返回到开始点击按钮的界面,达到了把点击对应得联系人显示到listView中,
如有什么问题,疑问请把问题留在评论里, 人无完人金无足赤,还希望有大家的点评,让我以后可以更加完善自己.
2 0
- ContentProvider获取系统的电话号码绑定到ListView以及跳转通讯录获区联系人信息绑定到前台。
- Android 点击按钮读取手机联系人并绑定到ListView中和点击按钮跳转系统联系人界面选中绑定至TextView
- android 跳转到通讯录并获取展示到页面 及android联系人信息获取
- 安卓跳转到通讯录,选择联系人后自动返回,把获取的信息显示到界面
- 通讯录电话号码的跳转获取
- Android跳转到系统通讯录新增和修改联系人
- Intent将在APP中获取到的联系人信息保存到通讯录
- 保存联系人到系统通讯录
- 绑定数据到ListView
- Android跳转到通讯录选择联系人
- Android 内容访问者 和 跳转到通讯录页面获取信息
- 【Android】【小记】获取系统通讯录的联系人信息
- 使用系统ContentProvider获取联系人信息
- IOS获取系统通讯录联系人信息
- IOS获取系统通讯录联系人信息
- IOS获取系统通讯录联系人信息
- IOS获取系统通讯录联系人信息
- iOS 调用系统通讯录 获取联系人信息
- MATLAB中FFT的应用
- Web API性能优化(一)压缩
- Android Studio添加so文件后,运行提示找不到so
- 安装反编译插件查看各种源码
- 面上直接显示图片
- ContentProvider获取系统的电话号码绑定到ListView以及跳转通讯录获区联系人信息绑定到前台。
- C#学习使用try-catch-finally错误处理表达式
- MyBatis学习笔记(四)优化MyBatis配置文件中的配置
- 矩阵的定义
- java 枚举类的使用
- web前端面试题整理(HTML篇)
- Think PHP 学习笔记 12.视图的使用
- java中的静态与匿名内部类总结
- C# winform中选择本地文件,并获取其路径