android 获取phone实例,Android ContentProvider获取手机联系人实例

在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家,方便以后要用的时候可以看看

我们先看下获取所有联系人的方式,把所有联系人展示在listView上

public void getLinkMan(View view){

//获取联系人

Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");

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"));

int number=cursor.getInt(cursor.getColumnIndex("number"));

Log.i("test",id+" "+name);

//继续获取相对应的联系人的数据(电话号码)

Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");

cursorData = cr.query(uriData,null,null,null,null);

while(cursorData.moveToNext()){

String data1= cursorData.getString(cursorData.getColumnIndex("data1"));

String type= cursorData.getString(cursorData.getColumnIndex("mimetype"));

if("vnd.android.cursor.item/phone_v2".equals(type)){

Log.i("test"," "+data1+":"+type);

Map map=new HashMap<>();

map.put("id",id);

map.put("name",name);

map.put("number",number);

list.add(map);

}

}

}

//实例化适配器

simpleAdapter = new SimpleAdapter(this,list, R.layout.item_linkman,new String[]{"_id","name","number"},new int[]{R.id.tv_item_list_id,R.id.tv_item_list_name,R.id.tv_item_list_number});

listView.setAdapter(simpleAdapter);

}

在控制台上输出的效果如图

1fff22e2b6f3f9ccc19fec803a3cf208.png

在模拟器上的效果就是一个listView

d45dff41f301fe95f5606c9559ba8a49.png

然后我们着重来看一下获取手机联系人

1)跳转到系统联系人界面

2)选择一个联系人

3)获取联系人名、手机号码

4)回调显示名字和号码

1)、跳转到系统联系人的界面代码可以在Intent跳转大全里面找

//跳转到通讯录界面

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

Intent intent=new Intent(Intent.ACTION_PICK,uri);

startActivity(intent);

2)、选择联系人,回调过去

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode){

case 0:

if(data==null) //判断返回的数据

{

return;

}

//获取选择的联系人信息

Uri uri=data.getData();

String contact[]=getPhoneContacts(uri);

Map map = new HashMap();

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);

}

3)、根据选择人的id,去数据库里面的表查询数据,返回联系人的姓名和号码,但是需要注意的是,我们的联系人和和联系人的手机号并不在一个表里,所以这时候我们需要对数据进行一些处理

private String[] getPhoneContacts(Uri uri){

String[] contact=new String[2];

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;

}

4)、然后添加权限,再把项目运行一遍,就可以看到我们的效果图了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑长截图软件_电脑屏幕长截图+WORD文档里没有插入PDF文件选项时怎么办? 简单一招轻松完成...

111111办 公 小 技 巧在用电脑查看网页时&#xff0c;想把网页上的内容截下来&#xff0c;保存成一张图片&#xff0c;可是内容又不全在一屏里&#xff0c;不能简单的用截屏完成&#xff0c;这时怎么办&#xff1f;想把一个PDF文件插入到WORD文档里&#xff0c;而电脑里的WORD版…

年终总结

时光飞逝,岁月如风,不知不觉新的一年来临了,回顾2010自己收获还是挺多的。虽然钱没余到多少&#xff0c;但是更多的是让我得到了成长、获得了经验。 我是8月份来到了爸妈在线的&#xff0c;很荣幸成为了爸妈在线的一员&#xff0c;同时也很高兴加入了技术研发部这个部门&#x…

Goland配置leetcode

1. 安装 首先在goland的setting界面上找到Plugins&#xff0c;然后搜索关键字leetcode&#xff0c;找到LeetCode Editor&#xff0c;安装它。 在安装后&#xff0c;第一次需要对其进行配置&#xff0c;在Tools中找到LeetCode Plugins&#xff0c;如下图所示进行配置。首先国内…

华为联发科可以升级鸿蒙吗,华为鸿蒙系统降临!首批升级手机确定,联发科芯片被放弃?...

原标题&#xff1a;华为鸿蒙系统降临&#xff01;首批升级手机确定&#xff0c;联发科芯片被放弃&#xff1f;按照计划&#xff0c;华为会在4月份逐渐开放鸿蒙系统手机版的升级&#xff0c;首批可升级的机型目前华为只确定了Mate X2。虽然说这两年采用华为自主芯片的手机&#…

python 多关键字匹配_使用django的objects.filter()方法匹配多个关键字的方法

介绍&#xff1a;今天在使用django的时候忽然想用到&#xff0c;如何匹配多个关键字的操作&#xff0c;我们知道django有一个objects.filter()方法&#xff0c;我们可以通过如下一句代码实现匹配数据库中title包含key关键词的文章名称。table.objects.filter(title__containske…

js中一些怪异的写法

1、var s (10)||{name:janey}   因为10是false,按照或运算规则&#xff0c;继续运算&#xff0c;得到{name:janey} &#xff0c;所以s{name:janey}   同理 var s (11)||{name:janey}&#xff0c;这时11为true,不再继续运算下去&#xff0c;所以strue;   或运算的结果并…

wordpress html页面缓存 cdn,WordPress 下老旧又高效的本地缓存插件 cos-html-cache

摘要Cos Html Cache是一种非常有效的WordPress页面缓存插件可以让你的站点更快更灵敏。基于URL重写&#xff0c;插件将自动生成HTML文件的帖子真正当他们第一次加载&#xff0c;并自动更新HTML文件。说起 WordPress 的缓存插件来对明月来说绝对是个老生常谈的话题了&#xff0c…

python记忆式键入_Python基础

一。基础1.输出与输入&#xff1a;输出&#xff1a;print(变量/字符串)输入&#xff1a;input() 返回的是字符串priceinput()print(price)2.python风格(1)注释 #(2)一般情况是一行结束该句结束&#xff0c;但是如果想要续行&#xff0c;在行的结尾加上 \(3)无需换行符也可以换行…

使用动软代码生成器的注意事项

使用动软代码生成器的注意事项 C# 2011-01-17 21:58:39 阅读21 评论0 字号&#xff1a;大中小 订阅 使用动软代码生成器的注意事项 工厂模式&#xff1a; 一、利用动软生成项目&#xff0c;设置顶级命名空间。二、打开所生成的项目&#xff0c;检查每一层是否为独立的程序集…

html5视差滚动效果,视差滚动效果

插件描述&#xff1a;制作视差滚动效果The meat and potatoes. Invoking these will move that page in from that side.parallax.bar.left(); //Bar slides in from the leftparallax.foo.top(); //bringing back foo from the topparallax.bar.bottom(IAmBack()); //We got c…

Oracle--基础

Oracle数据库的体系结构 数据库: databaseOracle数据库是数据的物理存储,和mysql不一样的是,只要我们愿意,我们就可以在mysql下创建任意的数据库,每个新项目的启动,创建一个数据库,然后通过showdatabases可以查看到全部数据库,但是Oracle的数据库是一个操作系统只有一个库,说白…

python自动化测试常见面试题二_思考|自动化测试面试题第二波

本内容为企业面试关于自动化测试的考题&#xff0c;大家可以自己思考下如何作答&#xff0c;欢迎把答案留言到本文下方哦。问题1&#xff1a;设计接口测试⽤用例例时&#xff0c;涉及的是电商系统&#xff0c;其中包括很多修改&#xff0c;如商品、商家、店铺等等&#xff0c;针…

html动态跟随鼠标效果,使用JS实现气泡跟随鼠标移动的动画效果

气泡跟随鼠标移动&#xff0c;并在每次点击时产生不同的变化效果如下简单的气泡效果body{background-color:#000000;margin:0px;overflow:hidden}var canvas document.createElement(canvas),context canvas.getContext(2d),windowW window.screen.width ,windowH window.s…

raspberry ssh 允许 root 登录

参考链接 csdn 转载于:https://www.cnblogs.com/eat-too-much/p/11153213.html

python开发转行做数据分析_转行学IT,Java、Python、大数据选择学哪个发展好?

对薪资不满意、担心自己以后不好找工作&#xff0c;不少人都会选择参加培训&#xff0c;转行IT行业。当然很多想要转行IT的人&#xff0c;都会犹豫选择哪门编程语言学习比较好&#xff0c;Python、Java、大数据作为比较热门行业技术&#xff0c;不少人都很疑惑转行学Java、Pyth…

html显示线条流动效果,css3实现线条流动效果

1实现原理&#xff1a;通过animation中的clip实现对div的不断切割首先要弄懂clip的含义&#xff0c;四个参数分别是上右下左&#xff0c;以上和左为标准。clip使用的前提是元素绝对定位。本来想实现这样效果看起来是需要3个div&#xff0c;但是根据前人的经验&#xff0c;使用b…

mysql 解析sql文件

简介 如何使用 本地mysql 解析sql文件 方法 参考链接 cnblogs 看三.创建数据库 参考链接 runoob 看选择数据库 参考链接 cnblogs 看往mysql中导入SQL文件 转载于:https://www.cnblogs.com/eat-too-much/p/11153383.html

html的数据类型有哪些,数据库数据类型有哪些

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。MySQL支持多种类型&#xff0c;大致可以分为三类&#xff1a;数值、日期/时间和字符串(字符)类型。推荐教程&#xff1a;MySQL入门视频教程一、数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类…

2021 河南 高考成绩查询,2021河南高考成绩查询入口

随着高考结束&#xff0c;高考阅卷工作陆续启动&#xff0c;已有多个省份公布了查分时间&#xff0c;那我们知道河南高考时间是什么时候嘛?下面是小编整理2021河南高考成绩查询入口_2021河南高考查分时间公布&#xff0c;仅供参考&#xff0c;希望能够帮助到大家。2021河南高考…

人脸检测算法_腾讯已开源高精度人脸检测算法DSFD

腾讯提出一种高精度双分支人脸检测器DSFD并开源。该算法曾在全球两大权威人脸检测数据集WIDERFACE和FDDB上均取得了第一。任务介绍人脸检测算法是在图像上检测出人脸的位置(通常以矩形框形式输出)&#xff0c;是人脸配准、人脸属性识别、人脸核身、人脸检索等技术的基础。随着人…