使用BroadcastReceiver监听系统接收的短信

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

public class SmsReceiver extends BroadcastReceiver{

  //当接收短信时被触发
  @Override
  public void onReceive(Context context, Intent intent) {
    // 如果是接收到短信
    if(intent.getAction().equals("android.provider.Telephony。SMS_RECEIVER")){
      //取消广播(这行代码将会让系统收不到短信)
      abortBroadcast();
      StringBuilder sb = new StringBuilder();
      //接收由SMS传过来的数据
      Bundle bundle = intent.getExtras();
      //判断是否有数据
      if(bundle != null){
        //通过pdus可以获得接收到的所有短信消息
        Object[] pdus = (Object[])bundle.get("pdus");
        //构建短信对象array,并依据收到的对象长度来创建array的大小
        SmsMessage[] messages = new SmsMessage[pdus.length];
        for(int i = 0 ; i <pdus.length ; i++){
          messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
        }
        //将送来的短信合并自定义信息于StringBuilder当中
        for(SmsMessage message : messages){
          sb.append("短信来源:");
          //获得接收短信的电话号码
          sb.append(message.getDisplayOriginatingAddress());
          sb.append("\n-----短信内容-----\n");
          //获得短信的内容
          sb.append(message.getDisplayMessageBody());
        }
      }
      Toast.makeText(context, sb.toString(), 5000).show();
    }
  }

}

为了让该程序在系统的短信接收程序之前被启动,需要将该BroadcastReceiver的优先级设置得高一些,在AndroidManifest.xml文件中通过如下代码来配置该BroadcastReceiver:

<receiver android:name=".SmsReceiver">
  <intent-filter android:priority="800">
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  </intent-filter>
</receiver>

时间: 2024-12-12 05:24:11

使用BroadcastReceiver监听系统接收的短信的相关文章

Android手机使用广播监听手机收到的短信

我们使用的Android手机在收到短信的时候会发出一条系统广播.该条广播中存放着接收到的短信的详细信息.本文将详细介绍如何通过动态注册广播来监听短信. 注册广播有两种方式,一种是动态注册,另一种是静态注册.动态注册,顾名思义就是在程序运行时注册的,需要用到广播的时候就注册,用完即销毁.静态注是在AndroidManifest.xml中注册的,在<application>中使用<receiver>标签注册. 那么如何创建一个监听短信的广播接收器呢,其实只需要新建一个类,让这个类继承B

Android开发之监听或获取手机短信内容【转】

最近做的项目里要监听手机的短消息内容,这个东西好像在最初学的时候都做过,不过现在早忘记了,现在写下来,记住了. 前提--权限: <uses-permission android:name="android.permission.RECEIVE_SMS" > </uses-permission> <uses-permission android:name="android.permission.READ_SMS" > </us

(转)[Android实例] 关于使用ContentObserver监听不到删除短信会话的解决方案

最近做通讯录的项目,需要实时监听短信的删除,就用到了观察者ContentObserver,怪异的事情就此发生,当我删除一条短信的时候,可以监听到,但是,当我删除整条短信的时候,就无法监听到,查了很多资料,都没有一个好的解决方案,顺便吐糟一下:大家来eoe发问题,问题解决了,也不说把解决的方法给大家分享一下... OK,先看源码吧com.android.providers.telephony.MmsSmsProvider这个类的删除操作源码 @Override    public int dele

Android 监听系统短信广播

使用场景: 1.对系统接收到的短信进行识别,是广告或者是诈骗等 2.对短信内容进行过滤或者是对内容进行提取,比如验证码提取 3.对系统短信进行拦截,连系统自己都不让收到了(不会出现在系统数据里面,也不会有系统短信的通知栏提示) 备注: 1.系统短信广播为有序广播,要拦截的话,需要在注册广播的时候设置广播优先级为最大,不过这种也有风险,如果被其他的应用先拦截了,那么我们将不再收到,使用时需注意. 2.要接到系统短信广播,那么应用必须具备短信读取权限,这对使用者来说可能是一个限制 3.除了短信读取权

通过ContentResolver监听系统短信变化

需要有读取短信的权限 <uses-permission android:name="android.permission.READ_SMS"/> ContentResolver注册一个内容观察者 ContentObserver内容观察者监听系统短信的变化 通过ContentResolver来获取短信内容提供者提供的短信信息 package com.heima.jiantingSms; import android.app.Activity; import android.c

广播小案例-监听系统网络状态 --Android开发

本例通过广播实现简单的监听系统网络状态改变的小案例. 1.案例效果演示 当手机连网后,系统提示“已连接网络”, 当手机断网后,系统提示“当前网络不可用1”. 2.案例实现 在主活动中动态注册广播,然后写一个内部类来接收系统广播,下面是相关文件的核心代码: MainActivity.java: public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private Networ

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

Server是如何完成针对请求的监听、接收与响应1

Server是如何完成针对请求的监听.接收与响应的[上] Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实现了IServer接口的所有类型以及对应对象的统称,如下面的代码片段所示,这个接口具有一个只读属性Features返回描述自身特性集合的FeatureCollection对象,另一个Start方法用于启动服务器. 1: public interface IServer : IDisposable 2

ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】

Server是ASP .NET Core管道的第一个节点,负责完整请求的监听和接收,最终对请求的响应同样也由它完成.Server是我们对所有实现了IServer接口的所有类型以及对应对象的统称,如下面的代码片段所示,这个接口具有一个只读属性Features返回描述自身特性集合的FeatureCollection对象,另一个Start方法用于启动服务器. 1: public interface IServer : IDisposable 2: { 3: IFeatureCollection Fea