一、知识介绍 1、broadcastReceiver是广播接受者,四大组件之一。 2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。 ...4、一个程序发出广播信息,一个程序接收广播信息,所以至少需要2个程序才能完成一发一收。发的一方,叫广播发送方;收的一方,叫广播接收者。 5、广播接受者需要进行注册。...方法,如果执行,代表已经接收到广播 ④定义收到信息广播接收者,属于系统广播,则需要申请权限(静态,动态) 【项目结构】 ?...--接收收到信息的广播-- </intent-filter </receiver 【MsgReceiver】 重写onReceiver方法,添加Toast import android.content.BroadcastReceiver...【小结】 ①这里是接收系统广播,也可以自己定义广播。以及可以添加很多功能,接收到广播进行特定的操作。
普通广播是完全异步的,逻辑上可以在同一时刻被所有匹配的接受者接收到,消息传递效率高,缺点是接受者不能将处理结果传递给下一个接收者,也无法终止广播传播。...有序广播的接收者们将按照事先生命的优先级依次接收,数越大优先级越高(取值范围:-1000~10000),优先级可以声明在<intent-filter android:priority="n"......并且接收者可以终止传播(调用abortBroadcast()方法即可终止),一旦终止后面接收者就无法接受广播。...短信拦截原理:系统收到短信,发出的Broadcast属于有序广播,程序就可以通过设定优先级先接收到通知,然后终止传递。...(); //中断广播,不会再响比它有优先级低得广播再传播下去了 7 } 8 } MyReceiver1.java 1 public class MyReceiver1 extends BroadcastReceiver
前言 承接前文《短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜》,在解决了短信发送的问题后,长长地舒了口气,也就各忙各的事情去了,本以为应该是个完美的收场,哪知道只是泥泞道路的前一段,收场是收不了了...,还是要去应付接下来的烂摊子,因为攻击者并没有停止攻击,虽然恶意请求已经可以被识别并且不会被业务服务器处理,也不会去触发短信发送接口,但是请求依然会源源不断的到达服务器,而且丝毫没有停止的意思。...虽然在程序中加入逻辑判断可以阻止非法请求对短信接口的触发,但是却无法阻止攻击者持续的向ECS发送请求,通过上图ECS的入网流量可以看到,在流量上升之后,并没有降下来的意思,得,这狗皮膏药真的一时没法撕下来了...说难度嘛,倒是没什么技术难度,至于麻烦嘛,是有一些小麻烦,再说损失,通过参数验证后,应该不会请求短信服务商再造成损失了,关键是被恶心到了,毕竟这个事情没法彻底的解决掉,除非停掉这一个服务,这是不可能的,...目前来看,虽然是解决了一部分问题,用请求验证阻止发送短信,用iptables阻止恶意IP的访问,但是并没有根本解除掉攻击,不排除攻击者会进一步攻击的可能性,因此只能被动的防守,同时也做好web和服务器的安全防护
(即onReceive方法不会掉) 1.注册广播与发送消息 /** * 注册广播 */ private fun register() { val filter = IntentFilter..., filter) } 2.短信监听广播 注意权限: * 邮箱:1981462002@qq.com * 说明:短信监听广播 */ class SMSBReceiver : BroadcastReceiver() {...") { Log.e("AppBReceiver", uri.toString() + "被安装了") } else if (action == "android.intent.action.PACKAGE_REPLACED...") { Log.e("AppBReceiver", uri.toString() + "被更新了") } else if (action == "android.intent.action.PACKAGE_REMOVED
监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的。 Android 监听系统短信有什么用?...1、对系统接收到的短信进行识别,是广告或者是诈骗等 2、对短信内容进行过滤或者是对内容进行提取,比如验证码提取 3、对系统短信进行拦截,连系统自己都不让收到了(不会出现在系统数据里面,也不会有系统短信的通知栏提示...1、系统短信广播为有序广播,要拦截的话,需要在注册广播的时候设置广播优先级为最大,不过这种也有风险,如果被其他的应用先拦截了,那么我们将不再收到,使用时需注意。...,只是系统自己的东西它有默认权限允许,不担心因为权限问题收不到短信广播 第5点可以这样验证:自己写一个短信广播的接收者,把短信广播给拦截了,会发现系统自己也收不到短信内容了。...(intent); } // 如果需要拦截广播,调用下面语句 abortBroadcast(); } } public class SmsReceiverProcessor
"/> 即使广播接收者的进程没有启动,当系统发送的广播可以被该接收者接收时,系统会自动启动该接收者所在的进程 案例2:短信拦截器 系统收到短信时会产生一条广播,广播中包含了短信的号码和内容 系统发送短信广播时...,是怎么把短信内容存入广播的,我们就只能怎么取出来 如果短信过长,那么发送时会拆分成多条短信发送,那么短信广播中就会包含多条短信 定义广播接收者接收短信广播 public void onReceive...,否则不生效 4.0以后广播接收者如果被手动关闭,就不会再启动了 项目3:监听SD卡状态 清单文件中定义广播接收者接收的类型,监听SD卡常见的三种状态,所以广播接收者需要接收三种广播 最终接收者:所有广播接收者都接收到广播之后,它才接收,并且一定会接收 abortBroadCast...:阻止其他接收者接收这条广播,类似拦截,只有有序广播可以被拦截 发送有序广播: sendOrderedBroadcast(intent); 第一个参数仍然是Intent,第二个参数是一个与权限相关的字符串
表明我们的广播已经发出去了。而且被MyReceiver准确无误的接收到了。...普通广播(Normal Broadcast) 普通广播对于多个接收者来说是全然异步的,通常每一个接收者都无需等待即能够接收到广播,接收者相互之间不会有影响。对于这样的广播。接收者无法终止广播。...这样做是从安全角度考虑的,比如系统的短信就是有序广播的形式,一个应用可能是具有拦截垃圾短信的功能,当短信到来时它能够先接受到短信广播,必要时终止广播传递。这种软件就必须声明接收短信的权限。...其他两个都没能运行,由于广播被第一个接收者终止了。 1。 该广播的级别有级别之分。...3, 同级别接收是先后是随机的,假设先接收到的把广播截断了,同级别的例外的接收者是无法收到该广播的。(abortBroadcast() ) 4 ,能截断广播的继续传播。高级别的广播收到该广播后。
前面我们把需要拦截的手机号都存储和展示出来了,接下来是使用广播接收者拦截短信了,这个广播接收者需要和一个服务绑定,服务开启的时候,接收者存在,服务停掉时,接收者关闭 在service包下定义一个类CallSmsSafeService...判断拦截模式,如果是全部拦截3或者短信拦截2,就调用abortBroadcast()方法 在设置中心对上面的服务进行配置,达到开启和关闭的功能 查看这篇:http://www.cnblogs.com/...; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent...; import android.content.IntentFilter; import android.os.IBinder; import android.telephony.SmsMessage...:" + sender); abortBroadcast(); } }
比较重要的一个广播事件,短信 界面布局,比如播放视频,默认是横屏全屏的,清单文件中进行设置, 在节点设置屏幕朝向属性,android:screenOrientation=”landscape...>节点 添加节点,设置关心的动作名称, android:name=”android.provider.Telephony.SMS_RECEIVED 添加权限,android.permission.RECEIVE_SMS...SmsMessage类的createFromPdu(pdu),强转Object成 byte[],此时会得到SmsMessage对象 调用SmsMessage对象的getMessageBody()方法,得到短信内容...调用SmsMessage对象的getOriginatingAddress()方法,得到发件人 调用abortBroadcast()方法,直接终止掉这条广播 清单文件中intent-filter节点上,...可以设置优先级属性,android:priority=”1000” 广播接收者的优先级,-1000优先级最低,1000优先级最高
等等 Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的额,现在只需要广播告知自己就可以了,大大的减少了开发的工作量和开发周期,而作为应用开发者,就需要熟练掌握Android系统提供的一个开发利器...,接受者相互之间不会有影响,对于这种广播,接受者无法终止广播,即无法阻止其他接受者的接收动作 MainActivity.java sendNormal = (Button) findViewById...5、有序广播 发送广播 sendOrderedBroadcast(); * 在注册广播中的中使用android:priority属性,这个属性的范围在-1000---1000...,例如系统的短信就是有序的广播的形式,一个应用可能是具有拦截垃圾短信的功能,当短信到来的时候它可以先接收到短信,必要时候终止广播的传递,这样的软件就必须声明接收短信的权限。...终止广播传递 abortBroadcast() * 同级别接收是先后是随机的,在到级别低的收到广播,如果先接收到的把广播拦截了,同级别以外的接收者是无法收到该广播的 * 在这个方法发来的广播(代码注册方式中
demo效果图: 读取短信 Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的验证码只需要监听这个广播然后提取出短信中的验证码即可...private OnReceiveSMSListener mOnReceiveSMSListener; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED...mOnReceiveSMSListener.onReceived(matcher.group()); } abortBroadcast...当短信号码为你要读取的短信发送方号码时用正则表达式提取出短信内容的验证码,然后通过调用监听器的回调方法更新相应的UI。...通常,我们只会在注册或登录页面读取短信验证码,所以,我们采用动态注册广播的方式注册这个广播,如: // 注册广播 IntentFilter intentFilter = new IntentFilter
BroadcastReceiver:广播接收者,Android四大组件之一,这个组件本质上就是一个全局监听器,用于监听系统全局的广播消息。...广播类型 ---- 广播分为两种: Normal Broadcast(普通广播):完全异步,可以在同一时刻被所有接收者接收到。...abortBroadcast()用于取消广播,如果这条代码生效,那么优先级比MyReceiver低的BroadcastReceiver都将不会被触发。...如果不注释abortBroadcast(),将会阻止消息广播,消息将传不到MyReceiver2。...系统广播 ---- 广播接收器除了可以接收用户发送的广播,还可以接收系统广播,常用的系统广播如下: ACTION_TIME_CHANGED:系统时间被改变。
读取短信 Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的验证码只需要监听这个广播然后提取出短信中的验证码即可...private OnReceiveSMSListener mOnReceiveSMSListener; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED...content); if(matcher.find()) { mOnReceiveSMSListener.onReceived(matcher.group()); } abortBroadcast...通常,我们只会在注册或登录页面读取短信验证码,所以,我们采用动态注册广播的方式注册这个广播,如: // 注册广播 IntentFilter intentFilter = new IntentFilter...EditText) findViewById(R.id.et_code); mSMSBroadcastReceiver.setOnReceiveSMSListener(this); // 注册广播
,被接收者依次接收广播。...()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。...系统收到短信,发出的广播属于有序广播。如果想阻止用户收到短信,可以通过设置优先级,让你们自定义的接收者先获取到广播,然后终止广播,这样用户就接收不到短信了。...除了短信到来广播Intent,Android还有很多广播Intent,如:开机启动、电池电量变化、时间已经改变等广播Intent。 ...-- 发送短信权限 --> 4.简单实例 下面是整合了Service与BroadCastReceiver的一个小例子,主要实现的是,在后台开通一个计数服务,当计数能被5整除时候则广播该数
demo效果图: 读取短信 Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的验证码只需要监听这个广播然后提取出短信中的验证码即可...private OnReceiveSMSListener mOnReceiveSMSListener; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED...pattern.matcher(content); if(matcher.find()) { mOnReceiveSMSListener.onReceived(matcher.group()); } abortBroadcast...通常,我们只会在注册或登录页面读取短信验证码,所以,我们采用动态注册广播的方式注册这个广播,如: // 注册广播 IntentFilter intentFilter = new IntentFilter...= (EditText) findViewById(R.id.et_code); mSMSBroadcastReceiver.setOnReceiveSMSListener(this); // 注册广播
简介 android广播其实上是发布-订阅模型,发布有两种方式,订阅也有两种方式 发布的两种方式是无序方式(普通广播)和有序方式(有序广播) 订阅的两种方式是静态订阅和动态订阅 发布的两种方式 无序方式...定义广播的接受者 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent... 其中android:priority="999"越大 就越早收到广播 有序广播可以终止,无序广播不能终止,终止方法如下 abortBroadcast...> 广播的常用方式 一个比较常见的例子就是自动读取短信验证码/短信拦截 系统在收到短信的时候,会发送一个:android.provider.Telephony.SMS_RECEIVED...这样的广播,而且这是一个有序的广播,所以我们就可以拦截了这条短信,因为系统中的短信接收者的订阅优先级不是1000最高的,所以我们可以自己定义一个短信接收者,将订阅优先级设置成1000,这样我们就可以最先获取到短信内容
通过广播接收者,接收到短信,对短信内容进行判断,如果为我们指定的值就执行相应的操作 如果短信内容是”#*location*#” 就执行,获取手机位置 如果短信内容是”#*alarm*#” 就执行,播放报警音乐...如果短信内容是”#*wipedata*#” 就执行,远程清除数据 如果短信内容是”#*lockscrreen*#” 就执行,远程锁屏 把短信的优先级定义成1000 使用模拟器发送短息的时候,会自动给发送号码拼接上...; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences...; import android.media.MediaPlayer; import android.telephony.SmsMessage; import android.widget.Toast;...MediaPlayer mp=MediaPlayer.create(context, R.raw.alarm); mp.start(); abortBroadcast
使用Android手机的时候,我们的手机管家中经常会出现开机自启动某某app,那么对于这个某某APP来说,他是怎么知道系统什么时候开机的呢?还有,系统短信怎么知道收到了短信?...这就讲到了Android四大组件之一:BroadcastReceiver,翻译是广播接收者。意思就是接收广播用的。他可以接收到系统开机完成的广播,以及系统电量不足的广播,以及系统收到短信的广播,等等。...如果想使得本APP的广播不被外界的广播所干扰,可以在receiver节点添加android:exported=”false”属性 ,这样系统遍历全部APP清单文件的广播接收者时不会对本receiver进行判断及处理...这种广播是安全的,外界不会干扰他,广播也不会被其他进程所收到。 sticky广播 sticky粘性的意思。这种广播一般不会终止,只要有符合条件的广播接收者能接收广播,那么就会发送给他广播。...();//拦截广播,广播被终止,以后不会有其他广播接收者再收到广播了。
今天博主带给小伙伴们一个小功能,就是利用广播接收器实现自动填充短信验证码,话不多说,我们先看看如何去实现这个小功能。...=getCode(content,6); //回调数据 mMessageListener.onReceived(code); abortBroadcast...)) { System.out.println(m.group()); return m.group(0); } return null; } } 至此我们短信的广播接收器就完成了...= "android.provider.Telephony.SMS_RECEIVED"; //生成广播处理 mSMSBroadcastReceiver = new SMSBroadcastReceiver...initSmsReader(); } @Override protected void onDestroy() { super.onDestroy(); //注销短信监听广播
(); } } abortBroadcast()可以截断有序广播 在AndroidManifest.xml中注册广播接收器;android:name里填接收器的名字。...,在需要有特定拦截的场景下使用,如黑名单短信、电话拦截。...本地广播:发出的广播只能在应用程序内部进行传递,广播接收器也只能接受来自本应用程序的广播。 全局广播:系统和广播,发出的广播可以被其他任何应用程序接收到,并且也可以接受到其他任何应用程序的广播。...在实现开机启动服务和网络状态改变、电量变化、短信和来电时通过接收系统的广播让应用程序作出相应的处理。...Toast.makeText(context, "received", Toast.LENGTH_SHORT).show(); //将这条广播截断 // abortBroadcast
领取专属 10元无门槛券
手把手带您无忧上云