MainActivity如下:

package cc.testsmslistener;import cc.testsmslistener.SMSContentObserver.MessageListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.app.Activity;
/*** Demo描述:* 利用ContentObserver实现短信查询* * 注意权限:* <uses-permission android:name="android.permission.READ_SMS" />**/
public class MainActivity extends Activity {private TextView mTextView;//所有短信public static final String URI = "content://sms/";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}private void init() {mTextView=(TextView) findViewById(R.id.textView);//注册内容观察者SMSContentObserver smsContentObserver = new SMSContentObserver(new Handler(),this);this.getContentResolver().registerContentObserver(Uri.parse(URI), true, smsContentObserver);//回调smsContentObserver.setOnReceivedMessageListener(new MessageListener() {@Overridepublic void OnReceived(String message) {mTextView.setText(message);}});}}

SMSContentObserver如下:

package cc.testsmslistener;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
public class SMSContentObserver extends ContentObserver {//所有短信public static final String SMS_URI_ALL = "content://sms/";//收件箱短信public static final String SMS_URI_INBOX = "content://sms/inbox";//发件箱短信public static final String SMS_URI_SEND = "content://sms/sent";//草稿箱短信public static final String SMS_URI_DRAFT = "content://sms/draft"; private Activity mActivity;private List<SmsInfo> mSmsInfoList;private MessageListener mMessageListener;public SMSContentObserver(Handler handler, Activity activity) {super(handler);this.mActivity = activity;}@Overridepublic void onChange(boolean selfChange) {super.onChange(selfChange);Uri uri = Uri.parse(SMS_URI_INBOX);mSmsInfoList = this.getSmsInfo(uri,mActivity);mMessageListener.OnReceived(mSmsInfoList.get(0).getSmsbody());System.out.println("Message content is:"+mSmsInfoList.get(0).getSmsbody());System.out.println("Message info is:"+mSmsInfoList.get(0));}/*** 注意:* 该处只用按照时间降序取出第一条即可* 这条当然是最新收到的消息*/private List<SmsInfo> getSmsInfo(Uri uri,Activity activity){List<SmsInfo> smsInfoList=new ArrayList<SmsInfo>();String[] projection = new String[] { "_id", "address", "person","body", "date", "type" };Cursor cusor = activity.managedQuery(uri, projection, null, null,"date desc limit 1");int nameColumn = cusor.getColumnIndex("person");int phoneNumberColumn = cusor.getColumnIndex("address");int smsbodyColumn = cusor.getColumnIndex("body");int dateColumn = cusor.getColumnIndex("date");int typeColumn = cusor.getColumnIndex("type");if (cusor != null) {while (cusor.moveToNext()) {SmsInfo smsinfo = new SmsInfo();smsinfo.setName(cusor.getString(nameColumn));smsinfo.setDate(cusor.getString(dateColumn));smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn));smsinfo.setSmsbody(cusor.getString(smsbodyColumn));smsinfo.setType(cusor.getString(typeColumn));smsInfoList.add(smsinfo);}cusor.close();}System.out.println("smsInfoList.size()="+smsInfoList.size());return smsInfoList;}// 回调接口public interface MessageListener {public void OnReceived(String message);}public void setOnReceivedMessageListener(MessageListener messageListener) {this.mMessageListener=messageListener;}
}

SmsInfo如下:

package cc.testsmslistener;
public class SmsInfo {//短信内容private String smsbody;//发送短信的电话号码private String phoneNumber;//发送短信时间private String date;//发送短信人的姓名private String name;//短信类型1是接收到的,2是已发出private String type;public String getSmsbody() {return smsbody;}public void setSmsbody(String smsbody) {this.smsbody = smsbody;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}@Overridepublic String toString() {return "SmsInfo [smsbody=" + smsbody + ", phoneNumber=" + phoneNumber+ ", date=" + date + ", name=" + name + ", type=" + type + "]";}}

main.xml如下:

<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"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"android:layout_centerInParent="true"/></RelativeLayout>

Android短信查询(二)——利用ContentObserver实现短信查询相关推荐

  1. 短信ui--短信设置界面之sim卡短信管理

    sim卡短信管理 1.前言           对于sim卡的短信管理,其功能包含了将存在手机上的短信保存到sim卡.将存储位置设置为sim卡时自动将短信保存到sim卡.将sim卡中的短信导入到电话中 ...

  2. Android简易实战教程--第九话《短信备份~二》

    这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain;publ ...

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

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

  4. 使用ContentObserver实现短信提醒功能

    通过查询语句:Cursor cursor = mContext.getContentResolver().query(Uri.parse("content://sms"), nul ...

  5. 利用java发送短信

    主要步骤: 一.连接短信验证平台 获取相关参数 想利用java实现发短信的功能,或者在登陆注册界面实现收取验证码的功能,必须和短信验证平台进行连接.这里选用的是 聚合数据 登陆 聚合数据 官网 进行注 ...

  6. 【机器学习】朴素贝叶斯介绍及实例--对短信进行二分类 使用多项式分布

    贝叶斯 首先什么是贝叶斯? 一个例子,现分别有 A.B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个球,且是 ...

  7. Android 10.0 Launcher3 电话和短信app图标显示未读短信和未接来电的条数

    最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动launcher时,查询未读短信和未接 ...

  8. Android项目:手机安全卫士(14)—— 短信备份

    Android项目:手机安全卫士(14)-- 短信备份 1 概述 哈哈,今天又是全新的一天,最近为工作上的事有点闹心,不过学习的心不变,还是需要坚持不懈的努力.今天的任务是实现短信备份功能,这个比较简 ...

  9. Android 11.0 12.0Launcher3 电话和短信app图标显示未读短信和未接来电的条数

    在11.0 12.0产品开发中,最近客户有需求要求在电话app图标显示未接来电的条数 在短信app图标上显示未读信息的条数 根据需求首选要在Launcher3的Launcher.java中,启动lau ...

最新文章

  1. Redis 与 Memcached的区别
  2. final关键字_深入分析Java中的final关键字
  3. java main函数_一行JAVA代码如何运行起来?
  4. 简析Kubernetes八大重要特性
  5. openssl 基本算法小例
  6. C#生成CHM文件(应用篇)
  7. 38译码器数码管c语言代码,通过38译码器控制数码管显示数字
  8. matlab人口增长线性回归拟合_科学网—matlab线性拟合 - 张瑞龙的博文
  9. 广发银行薪资待遇JAVA_广发银行薪资待遇如何?
  10. Teamcenter Item
  11. GDSOI 2016 T2 星际穿越
  12. latex安装后运行报错:系统找不到指定的文件,试试这样吧
  13. JS - 阿里云 OSS 文件下载通用办法(支持跨域)
  14. 概念建模(CDM)-------数据建模(一)
  15. 连接校园网的路由器为啥老是服务器没响应,校园网路由器不能使用怎么办?
  16. R语言入门1---R语言介绍以及学前注意事项
  17. 用HTML+CSS做一个漂亮简单的个人网页~个人相册介绍个人主页模板(6个页面) ~学生HTML个人网页作业作品~
  18. 针对safecast数据集的数据清洗
  19. C语言的指针\数组用图解一次搞懂
  20. 笔记:二元Probit与Logit模型

热门文章

  1. Navicat for MySQL介绍以及Navicat for MySQL基本使用方法
  2. CSS模块的书写以及删除线的作用和来历什么是删除线
  3. mvn打包springboot项目,打包时报错:子模块找不到找不到父模块所配置的信息,<relativePath /> 所引发的问题
  4. idea复制后去除波浪线问题
  5. wstring_convert
  6. 微信上的Siri:小i机器人首次接入微信语音API
  7. Linux安装Gbase数据库(单机)
  8. 配置Hystrix Dashboard 时遇到的Unable to connect to Command Metric Stream.问题
  9. 微信小程序设置背景图铺满顶部
  10. Sublime代码编辑器中代码高亮显示