获取联系人效果图:

获取短信效果图:

前提--——添加权限:

<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实现读取手机联系人和短信内容相关推荐

  1. android获取手机短信记录,android 获取手机电话号码和短信内容

    通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来. 1.实现的代码: package com.example.phone; import java.text.Simple ...

  2. android 获取手机电话号码和短信内容

    通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来. 1.实现的代码: package com.example.phone;import java.text.SimpleD ...

  3. JavaScript 通过plus读取android手机短信内容

    JavaScript 通过plus读取android手机短信内容. 1.获取android权限 在HBuilder工程中双击应用的"manifest.json"文件,切换到&quo ...

  4. 安卓手机里的短信删除了如何恢复

    安卓手机里的短信删除了如何恢复?生活中人们已经对手机产生很大的依赖,当然手机里也拥有这很多个人信息以及隐私,虽然现在很多时候大家聊天都会使用微信或者QQ,但是也有些重要的事情会发短信,如果不小心把短信 ...

  5. android 短信迁移到iphone,将安卓手机上的短信导入到iphone上的方法

    很多用安卓手机的朋友们换iphone5之后,之前手机里的一些数据想倒到新手机里都是比较棘手的问题,尤其是不同的操作系统,像android--ios这样,今天看到个新方法,特意转过来给大家分享一下,方法 ...

  6. 安卓手机导入html短信,旧手机短信导入新手机

    使用QQ同步助手同步,下载QQ同步助手软件到两部手机中,登陆同一个微信/QQ账号,在一部手机中选择短信备份,备份完成后在另一部手机同步即可.苹果手机之间还可以使用iCloud账户同步.还可以使用手机自 ...

  7. 安卓开发系列 之如何获取手机短信内容

    1 手机中短信数据库相关字段包括: _id:短信序号,如100 address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否加+86,可以加上86和不加86分别测试 ...

  8. Android开发之监听或获取手机短信内容

    最近开始学习安卓,要做一个可以监听手机短信的内容,做个笔记,方便以后查看 有两种方式: 方式一:通过广播监听短信信息 注册一个广播接收器 <receiver android:name=" ...

  9. Nokia NBU备份文件查看工具(包含联系人和短信)

    (zz)Nokia NBU备份文件查看工具(包含联系人和短信) 原作者:秋天 链接 http://wap.cfresh.net/index-wap2.php?p=802 手头现在用的手机仍然是07年入 ...

最新文章

  1. 2016各大公司校招薪水曝光:年薪28万,这只是零花钱
  2. canvas高度问题_Android的drawText的坐标问题
  3. centos 7 修复mysql,快速修复Centos7 系统时区!
  4. DNN结构:CNN、LSTM/RNN中的Attention结构
  5. 写一个方法判断一个字符串是否对称_判断一个男生是否好色的方法
  6. PAT:1047. Student List for Course (25) AC
  7. android 菜单隐藏了,隐藏一些导航菜单菜单项 – Android
  8. 两天,我把分布式事务搞完了!
  9. python网络爬虫系列教程——Scrapy框架应用全解
  10. 令人笑喷的56个代码注释,最后几个老衲实在憋不住了。。。
  11. Vue之跨域调用网易云音乐API及QQ音乐API
  12. Excel如何根据身份证号码提取出性别
  13. 一种去除U盘写保护的可行方法(dd 命令解决)
  14. C语言lrc校验算法详解,C语言解析lrc文件
  15. unity游戏开发为什么工作这么难找
  16. 语言 {软件开发概述}
  17. 小程序源码:游戏扫码登录多功能工具箱集合
  18. 中科院计算机学院考研2021,2021中国科学院大学研究生分数线一览表(含2019-2020历年复试分数线)...
  19. 阿里最新春招面经,腾讯 / 美团 / 字节 1 万道 Java 中高级面试题
  20. html清除js设置的浮动,css 怎么清除浮动

热门文章

  1. 2021-04-23 一年后第一次踢球
  2. 用Python给娃送上一份猪年春节礼物。文末源码!
  3. qstock 玩转问财:一行代码实现条件选股
  4. Android 系统页面的调用
  5. 【深圳】大疆创新 - 测试/测试开发工程师 - 自动驾驶方向
  6. Advanced SystemCare Pro 中文绿色特别便携正式版一款易于使用的 Windows 电脑优化工具
  7. 【转】很有哲理的句子,每天都值得看一遍
  8. 前端学习笔记01---HTML5、CSS3、移动端前端基础学习知识点合集
  9. Stream流分组求和
  10. 视觉SLAM——特征点法与直接法对比以及主流开源方案对比 LSD SVO ORB DSO