既然写了发送短信,那么接收短信肯定也是一定要写的了。

  接收短信主要是广播的接收,每当Andorid接收到一条新短信时都会产生一个广播,我们的程序通过捕获这个广播,就能获取短信了。

  依旧是权限问题:<uses-permission android:name="android.permission.RECEIVE_SMS" />。

  我自己的广播类:

 1 public class myBroadCast extends BroadcastReceiver
 2 {
 3     private String SMS_MSG = "android.provider.Telephony.SMS_RECEIVED";
 4
 5     @Override
 6     public void onReceive(Context context, Intent intent)
 7     {
 8         if (SMS_MSG.equals(intent.getAction()))
 9         {
10             Object[] msg = (Object[]) intent.getExtras().get("pdus");
11             SmsMessage[] sms = new SmsMessage[msg.length];
12
13             for (int i = 0; i < msg.length; i++)
14             {
15                 sms[i] = SmsMessage.createFromPdu((byte[]) msg[i]);
16
17                 String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(sms[i].getTimestampMillis()));
18
19                 Log.i("信息", "第" + i + "条");
20                 Log.i("信息", "时间:" + time);
21                 Log.i("信息", "发送者:" + sms[i].getOriginatingAddress());
22                 Log.i("信息", "内容:" + sms[i].getMessageBody());
23             }
24         }
25     }
26 }

  在注册广播时,需要添加action:

1 <receiver android:name=".myBroadCast" >
2     <intent-filter>
3         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
4     </intent-filter>
5 </receiver>

  上面代码测试的结果是,即使发送者发送的信息过程被拆成了多条发送,接收方依然会把每一条短信都当成单独的短信来对待,i的值永远都是0。

  我们除了可以获取当前接收到的短信信息,也可以获取一些已经存在手机中的短信信息,比如说:收件箱,发送箱,草稿箱之类的。

  首先依旧是权限问题,需要添加权限:<uses-permission android:name="android.permission.READ_SMS"/>。添加这个权限之后,我们才能查询SMS收件箱,查询是通过访问URI方式实现的,在这里我只实现了查询收件箱的功能,如果想查询其他,可以通过修改URI来实现。

 1 Uri uri = Uri.parse("content://sms/inbox");
 2 Cursor c = getContentResolver().query(uri, null, null, null, null);
 3
 4 startManagingCursor(c);
 5
 6 int columnCount = c.getColumnCount();
 7
 8 for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
 9 {
10     for (int j = 0; j < columnCount; j++)
11     {
12         String name = c.getColumnName(j);
13         String value = c.getString(j);
14         /*因为value有时会是null,为了防止Log类的异常,所以进行字符串拼接处理*/
15         Log.i(name, value + "");
16     }
17     Log.i("", "-------------------偶是分割线------------------------");
18 }

  cursor中共有16个字段,一般我们比较感兴趣的是:

  • address(发送者)
  • date(时间,可以通过new Date(date)的方式获取真正的时间)
  • body(信息内容)
  • read(是否已读,已读值为1,未读值为0)

  下面是SMS文件夹列表以及每一个文件夹的URI:

  • 所有文件夹:content://sms/all
  • 收件箱:content://sms/inbox
  • 已发送:content://sms/sent
  • 草稿:content://sms/draft
  • 发件箱:content://sms/outbox
  • 发送失败:content://sms/failed
  • 队列信息:content://sms/queued
  • 未送达:content://sms/undelivered
  • 对话:content://sms/conversations

转载于:https://www.cnblogs.com/xiaoxiongbuwawa/archive/2012/10/24/2735781.html

Android接收短信相关推荐

  1. Android接收短信和发送短信

    一.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  2. Android接收短信-createFromPdu

    createFromPdu(byte[]) method was deprecated in API level 23. Use createFromPdu(byte[], String) inste ...

  3. Android拦截短信并屏蔽Notification

    Android拦截短信并屏蔽Notification 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收" ...

  4. Android使用BroadCastRecevier广播实现接收短信,并利用Toast弹出显示内容

    在上一篇文章 Android简单实现BroadCastReceiver广播机制 中简单的实现了一个广播机制,这里利用BroadCarstRecevier实现一个接收短信并显示内容的案例,当然至于接收到 ...

  5. Android中发送和接收短信

    在做Android开发中经常要用到短信的发送和短信的接收,调用Android提供的api实现起来很简单,今天要用到这个功能研究了一下顺便写下来加强一下记忆. 1.首先创建一个Android Proje ...

  6. Android从普通发送和接收短信到对短信进行拦截

    概述: 说实话,关于Android中对短信的一些相关操作是一个比较入门的东西.那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Andro ...

  7. android sms 接收短信,Android SMS 短信操作

    android的短信保存在短信库里,但并提供类似Contacts的公开的Content Provider方便操作.这里简单的介绍下:android中的短信信息保存在/data/data/com.and ...

  8. Android:短信的接收

    短信的接收, 请先看一个 Demo private void initReceiverSms() {tv_content = (TextView) findViewById(R.id.tv_conte ...

  9. android app 短信接收,Android创建简单发送和接收短信应用

    本文实例为大家分享了Android创建发送和接收短信应用的简单实现过程,供大家参考,具体内容如下 一.接收短信 项目的结构如下:一个简单的接收和发送短信的功能 1.定义一个接收短信的广播:当手机接收到 ...

最新文章

  1. 吐血整理:论文写作中注意这些细节,能显著提升成稿质量
  2. suricata规则
  3. 如何上传应用到百度应用(图解攻略)
  4. 【JavaScript 1—基础知识点】:宏观概述
  5. Supplier 点participate时候用USB KEY的身份验证
  6. php ip处理函数,PHP取ip地址函数
  7. 我的服装DRP之开发感悟
  8. ORA-00972: identifier is too long问题解决
  9. MySQL后初次密码_mysql第一次安装成功后初始化密码操作步骤
  10. TX1在opencv中调用gstreamer解码海康IP摄像头
  11. RIDE在linux系统下运行,在linux上执行robotframework用例
  12. 上计算机课睡觉检讨书400,小学生上自习课睡觉检讨书
  13. mysql中表结构语句_mysql中表数据与表结构复制语句
  14. Java 简单TCP文件传输
  15. 诺贝文学奖对莫言获奖评价
  16. 近几年美国人口数据matlab,【美国人口2018总人数】美国人口数量2018|美国人口世界排名...
  17. java开发平台有哪些_java都有哪些开发平台
  18. ExaGrid在2021年网络计算大奖评选中大获全胜
  19. Loadrunner 9.5 flex性能测试
  20. 湖南张家界旅游景区项目方案书

热门文章

  1. android 输出流对象,Android-IO流之对象操作流ObjectInputStream/ObjectOutputStream
  2. 服务器的安装文件,服务器存储安装文件
  3. linux中info功能是什么意思,Linux中的info指令
  4. python image模块需要安装吗_python Image模块安装
  5. r420 raid linux,Dell R420 RAID建立以及系统安装
  6. java并发测试 线程池,Java并发编程——线程池
  7. selenium拖动元素java_使用Java在Selenium WebDriver中聚焦元素的正确方法
  8. 修改服务器时间需要重启吗,云服务器需要定期重启吗
  9. 传感器阵列波束优化设计与应用_传感器阵列波束优化设计与应用.pdf——马远良...
  10. ReactNative绑定函数中的this