从 “您有一条短信”这个最常见的手机服务开始,本程序设计了一个可以接收短信的程序,将捕捉到的短信广播信息,拆解为可阅读的消息正文,而后以Toast的方式输出至手机。
在Android操作系统中,有很多电话相关时间(Telephony Event)会对系统发送信息,短信事件也不发生异常,当系统受到(Receiver)信息后,会由负责此项功能的Intent接手处理。如果想在自己程序中捕捉短信的广播信息,需要集成BroadcastReceiver对象来聆听短信服务。手机接到短信,会在Notification中提示摘要,一般格式电话号码:内容摘要。
本程序模拟受到一条短信信息,然后以Toast方式提示给用户,处理程序如下:

首先布局页面(textview.xml)

布局页面只有一个TextView,显示“等待接收......“
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">

<TextView android:id="@+id/TextView01" android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>    
</LinearLayout>

主程序(BroadCastTest.java):
package test.shi;

import android.app.Activity;
import android.os.Bundle;
import android.widget.*;

public class BroadCastTest extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.textview);

TextView txt=(TextView)findViewById(R.id.TextView01);
txt.setText("等待接收......");
}

}

重要的是下面的这个类,它继承了BroadcastReceiver,重写了onReceive方法,在这个方法中将信息进行过滤并拼接成我们能读懂的内容。
BroadCastGet.java

package test.shi;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.sax.StartElementListener;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class BroadCastGet extends BroadcastReceiver {

/*声明静态字符串,并使用android.provider.Telephony.SMS_RECEIVED
作为Action为短信的依据*/
  private static final String mACTION=
"android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

if(intent.getAction().equals(mACTION))
{

StringBuilder sb=new StringBuilder();
Bundle bundle=intent.getExtras();
if(bundle!=null)
{
Object[] obj=(Object[])bundle.get("pdus");

//构建信息对象
SmsMessage[] message=new SmsMessage[obj.length];
for(int i=0;i<obj.length;i++)
{
message[i]=SmsMessage.createFromPdu((byte[])obj[i]);
}

for(SmsMessage currentMessage:message)
{
sb.append("接收到来自:/n");                    
//发送人的电话号码
sb.append(currentMessage.getDisplayOriginatingAddress());
sb.append("/n-------传来的信息---------/n");
//发送的信息内容
sb.append(currentMessage.getDisplayMessageBody());

}
}
//以Notification显示来讯信息
Toast.makeText(context,sb.toString(), Toast.LENGTH_LONG).show();

//返回主程序BroadCastTest
Intent i=new Intent(context,BroadCastTest.class);
//以一个全新的任务来运行
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

}
}

}

AndroidManifest.xml中需要注册Activity和Recevier,首先需要添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

然后注册Activity和Recevier
<activity android:name="BroadCastTest">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="BroadCastGet">
<intent-filter>
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

这样程序运行起来之后就会看到TextView, 
<action android:name="android.provider.Telephony.SMS_RECEIVED" />中的name值必须跟BroadCastGet.java中的

private static final String mACTION=
"android.provider.Telephony.SMS_RECEIVED";
值匹配,否则无法正确接受信息。

我们利用Eclipse自带的Emulator Control窗口来模仿发送信息,如果你的Eclipse中看不到Emulator Control窗口,可以在菜单Window->show view->others...中找到,打开Emulator Control,会看到如下的图形。

点击send可以发送信息,运行后的界面如下:

此程序中注册的BroadcastReceiver属于常驻类型,即不会自动销毁,必须手动移除这个项目才行,至于BroadcastReceiver的销毁方式等内容,我将在以后的文章中提到,请大家期待吧。

BroadcastReceiver使用之一(常驻BroadcastReceiver接收短信)相关推荐

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

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

  2. Android中发送和接收短信

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

  3. Android接收短信

    既然写了发送短信,那么接收短信肯定也是一定要写的了. 接收短信主要是广播的接收,每当Andorid接收到一条新短信时都会产生一个广播,我们的程序通过捕获这个广播,就能获取短信了. 依旧是权限问题:&l ...

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

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

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

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

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

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

  7. Python3,5句话实现自动接收短信提醒

    平时由于工作原因,会错过一些邮件, 为了避免这种事情的发生,小鱼搞了一个自动接收短信的服务, 这样就不会在错误重要的邮件喽. 接下来我们就一起来看看吧 TWilio平台注册 代码实现 TWilio平台 ...

  8. 手机接收短信验证码生成(纯数字)

    手机接收短信验证码生成--纯数字 Random类中的nextInt( )方法 nextInt() 纯数字短信验证码生成 Random类中的nextInt( )方法 nextInt() 不带参数,不带参 ...

  9. SMS注册与接收短信

    Android4.2 在Android4.0中,Phone应用的Application类PhoneApp的onCreate方法中调用了 PhoneFactory.makeDefaultPhones(t ...

最新文章

  1. Oracle SQL Tuning Advisor 测试
  2. BCH DEVCON 黑客马拉松即将登陆旧金山!
  3. 1500+ FPS!目前最快的CNN人脸检测算法开源
  4. python【力扣LeetCode算法题库】9- 回文数
  5. 数据存储之SharedPreferences
  6. 【Python】编程笔记2
  7. python单链表操作_单链表的创建、增删改查等操作(Python实现)
  8. mkswap,swapon, swapoff命令:创建交换分区
  9. 【推荐一位Python大佬】 从程序员到创业者,再到自由职业
  10. JS的Date.setMonth()方法坑
  11. Mysql 5.7 错误号码1862 Your password has expired. To log in you must change it using a client...
  12. 《Python CookBook2》 第四章 Python技巧 对象拷贝 通过列表推导构建列表
  13. Docker封装Java环境镜像(Alpine+OpenJDK)
  14. 【原】expdp参数CONTENT
  15. java动态是如何根据实体建表_传入Java对象 自动创建动态表 并录入数据
  16. QGIS 3. 使用qgis制作三维浮雕地图
  17. 苹果4s怎么越狱教程_苹果手机:iPhone 11/XS系列iOS13-13.3越狱教程
  18. Ubuntu默认防火墙UFW命令大全
  19. armbian 斐讯n1_斐讯N1刷Armbian Linux做服务器
  20. 【十五】傅里叶变换,拉斯变换,z变换的关系

热门文章

  1. 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)
  2. sqlzoo错题总结-1
  3. android glide面试题,Android面试:80%的面试官关于Glide都会问这几个问题!【建议收藏】...
  4. 基于手机蓝牙的arduino遥控小车
  5. 机器学习 - 随机森林 Random Forest
  6. 【数据结构】折半查找法
  7. Vertex Atrributes
  8. 8B10B编解码原理与FPGA代码
  9. iOS高性能Model转换框架----YYModel学习
  10. shell if 未找到命令