安卓使用ContentProvider实现读取手机联系人和短信内容
获取联系人效果图:
获取短信效果图:
前提--——添加权限:
<1>获取手机联系人
通过短信数据库获取联系人内容:
Activity代码:
package com.example.android_readcontacts;import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;public class MainActivity extends AppCompatActivity {private ContentResolver contentResolver;private List<Map<String, Object>> data;private ListView lt_main_listview;private SimpleAdapter simpleAdapter;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lt_main_listview = (ListView) findViewById(R.id.lt_main_listview);//得到内容监听者 contentResolver = getContentResolver();//展示数据 data = new ArrayList<Map<String,Object>>();//准备适配器 simpleAdapter = new SimpleAdapter(this, data,android.R.layout.simple_list_item_2,new String[]{"name","phone"},new int[]{android.R.id.text1,android.R.id.text2});//设置适配器 lt_main_listview.setAdapter(simpleAdapter);}//获取联系人 public void getContacts(View view){//获取系统联系人地址 Cursor cursor=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts"),null,null,null,null);while (cursor.moveToNext()){Map<String,Object> map=new HashMap<>();//获取系统表字段 //联系人id int id=cursor.getInt(cursor.getColumnIndex("_id"));//联系人姓名 String displayName=cursor.getString(cursor.getColumnIndex("display_name"));//放值 map.put("name",displayName);//根据联系人获取联系人数据 Cursor cursor2=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data"),null,null,null,null);while (cursor2.moveToNext()){String type=cursor2.getString(cursor2.getColumnIndex("mimetype"));String data1=null;if("vnd.android.cursor.item/phone_v2".equals(type)){data1 = cursor2.getString(cursor2.getColumnIndex("data1"));map.put("phone",data1);}}//放数据进集合 data.add(map);}//通知适配器发生改变 simpleAdapter.notifyDataSetChanged();} }
layout代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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" tools:context="com.example.android_readcontacts.MainActivity"><Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getContacts" android:text="获取手机所有联系人" /><ListView android:id="@+id/lt_main_listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="60dp"></ListView></RelativeLayout>
<2>获取手机短信
通过短信数据库获取短信内容:
Activity代码:
package com.example.android_readcontacts;import android.content.ContentResolver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern;/** * Created by Administrator on 2017/2/21. */ public class TwoActivity extends AppCompatActivity {private ContentResolver contentResolver;private List<Map<String, Object>> data;private ListView lt_main_listview;private SimpleAdapter simpleAdapter;@Override protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_two);lt_main_listview = (ListView) findViewById(R.id.lt_main_listview2);//获取内容监听者 contentResolver = getContentResolver();//展示数据 data = new ArrayList<Map<String,Object>>();//准备适配器 simpleAdapter = new SimpleAdapter(this, data,android.R.layout.simple_list_item_2,new String[]{"number","body"},new int[]{android.R.id.text1,android.R.id.text2});//设置适配器 lt_main_listview.setAdapter(simpleAdapter);}//获取系统短息地址 private Uri uri = Uri.parse("content://sms/");//获取短信内容 public void getSms(View view){//获取内容监听者 ContentResolver cr=getContentResolver();//获取短信内容 String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};//创建查询 Cursor cursor=cr.query(uri,projection,null,null,"date desc");if(null==cursor){return;}while (cursor.moveToNext()){Map<String,Object> map2=new HashMap<>();//循环获取短信内容 //发件人地址 String number=cursor.getString(cursor.getColumnIndex("address"));map2.put("number",number);//发件人,如果发件人在通讯录中则为具体姓名,陌生人为null String name=cursor.getString(cursor.getColumnIndex("person"));map2.put("name",name);//短信具体内容 String body=cursor.getString(cursor.getColumnIndex("body"));map2.put("body",body);//获取自己短信服务号码中的验证码~~ Pattern pattern = Pattern.compile(" [a-zA-Z0-9]{10}");Matcher matcher = pattern.matcher(body);if (matcher.find()) {String res = matcher.group().substring(1, 11);map2.put("content",res);}//放数据进集合 data.add(map2);}//通知适配器发生改变 simpleAdapter.notifyDataSetChanged();} }
layout代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"><Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getSms" android:text="获取手机所有短信内容" /><ListView android:id="@+id/lt_main_listview2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="60dp"></ListView> </LinearLayout>
SMS注释:
_id:短信序号,如100
thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的
address:发件人地址,即手机号,如+8613811810000
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date:日期,long型,如1256539465022,可以对日期显示格式进行设置
protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信
read:是否阅读0未读,1已读
status:短信状态-1接收,0complete,64pending,128failed
type:短信类型1是接收到的,2是已发出
body:短信具体内容
service_center:短信服务中心号码编号,如+8613800755500
安卓使用ContentProvider实现读取手机联系人和短信内容相关推荐
- android获取手机短信记录,android 获取手机电话号码和短信内容
通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来. 1.实现的代码: package com.example.phone; import java.text.Simple ...
- android 获取手机电话号码和短信内容
通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来. 1.实现的代码: package com.example.phone;import java.text.SimpleD ...
- JavaScript 通过plus读取android手机短信内容
JavaScript 通过plus读取android手机短信内容. 1.获取android权限 在HBuilder工程中双击应用的"manifest.json"文件,切换到&quo ...
- 安卓手机里的短信删除了如何恢复
安卓手机里的短信删除了如何恢复?生活中人们已经对手机产生很大的依赖,当然手机里也拥有这很多个人信息以及隐私,虽然现在很多时候大家聊天都会使用微信或者QQ,但是也有些重要的事情会发短信,如果不小心把短信 ...
- android 短信迁移到iphone,将安卓手机上的短信导入到iphone上的方法
很多用安卓手机的朋友们换iphone5之后,之前手机里的一些数据想倒到新手机里都是比较棘手的问题,尤其是不同的操作系统,像android--ios这样,今天看到个新方法,特意转过来给大家分享一下,方法 ...
- 安卓手机导入html短信,旧手机短信导入新手机
使用QQ同步助手同步,下载QQ同步助手软件到两部手机中,登陆同一个微信/QQ账号,在一部手机中选择短信备份,备份完成后在另一部手机同步即可.苹果手机之间还可以使用iCloud账户同步.还可以使用手机自 ...
- 安卓开发系列 之如何获取手机短信内容
1 手机中短信数据库相关字段包括: _id:短信序号,如100 address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否加+86,可以加上86和不加86分别测试 ...
- Android开发之监听或获取手机短信内容
最近开始学习安卓,要做一个可以监听手机短信的内容,做个笔记,方便以后查看 有两种方式: 方式一:通过广播监听短信信息 注册一个广播接收器 <receiver android:name=" ...
- Nokia NBU备份文件查看工具(包含联系人和短信)
(zz)Nokia NBU备份文件查看工具(包含联系人和短信) 原作者:秋天 链接 http://wap.cfresh.net/index-wap2.php?p=802 手头现在用的手机仍然是07年入 ...
最新文章
- 2016各大公司校招薪水曝光:年薪28万,这只是零花钱
- canvas高度问题_Android的drawText的坐标问题
- centos 7 修复mysql,快速修复Centos7 系统时区!
- DNN结构:CNN、LSTM/RNN中的Attention结构
- 写一个方法判断一个字符串是否对称_判断一个男生是否好色的方法
- PAT:1047. Student List for Course (25) AC
- android 菜单隐藏了,隐藏一些导航菜单菜单项 – Android
- 两天,我把分布式事务搞完了!
- python网络爬虫系列教程——Scrapy框架应用全解
- 令人笑喷的56个代码注释,最后几个老衲实在憋不住了。。。
- Vue之跨域调用网易云音乐API及QQ音乐API
- Excel如何根据身份证号码提取出性别
- 一种去除U盘写保护的可行方法(dd 命令解决)
- C语言lrc校验算法详解,C语言解析lrc文件
- unity游戏开发为什么工作这么难找
- 语言 {软件开发概述}
- 小程序源码:游戏扫码登录多功能工具箱集合
- 中科院计算机学院考研2021,2021中国科学院大学研究生分数线一览表(含2019-2020历年复试分数线)...
- 阿里最新春招面经,腾讯 / 美团 / 字节 1 万道 Java 中高级面试题
- html清除js设置的浮动,css 怎么清除浮动