系统广播和接收
一。创建接收器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/** * 1.创建接收者。接收系统的广播 * 自定义类,继承 BroadcastReceiver */ public class MyReceiver extends BroadcastReceiver { /** * 当接收到广播,处理 */ @Override public void onReceive(Context context, Intent intent) { // 打电话 // 如果截获的意图是 项目/AndroidManifest.xml/<receiver>/<intent-filter>/<action android:name="系统事件"/> if (intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")){ // 截获数据 String number = getResultData(); // 修改数据 // setResultData("17951"+number); // 测试短信拦截有影响 System.out.println("截获的数据:" + number); } // 内存卡拔出 else if(intent.getAction().equals("android.intent.action.MEDIA_REMOVED") || intent.getAction().equals("android.intent.action.MEDIA_UNMOUNTED")){ Toast.makeText(context, "内存卡被移除了", 1).show(); } // 收到短信 // 注意:4.4版开始,已经不能实现了:能接收拦截到,但是不能终止广播 else if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ System.out.println("拦截短信"); Object[] objs = (Object[]) intent.getExtras().get("pdus"); for (Object obj : objs) { // 得到短信对象 SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj); String body = smsMessage.getMessageBody(); // 信息内容 String sender = smsMessage.getOriginatingAddress(); // 发件人 System.out.println(body + " - " + sender); // 终止掉当前的广播。级别:<intent-filter android:priority="1000" > //if ("15555215556".equals(sender)) { // 如果来收到信息发送者是5556。不判断将拦截全部短信 // 终止广播事件,系统的信息app就接收不到了 abortBroadcast(); //} } } } } |
二。注册接收器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cujweiyou.broadcast" android:versionCode="1" android:versionName="1.0" > <!-- 2.添加权限 --> <!-- 拨打电话 --> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> <!-- 卸载文件系统。卸载tf内存卡 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 接收短信。4.2版就开始不再提示,4.4版即阉割了 --> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="20" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 3.注册接收器,接收系统的广播 --> <!-- 接收器类 --> <receiver android:name="com.cujweiyou.broadcast.MyReceiver" > <!-- 过滤不同的广播 --> <intent-filter> <!-- 媒体卸载事件 --> <action android:name="android.intent.action.MEDIA_UNMOUNTED" /> <!-- 媒体移除事件 --> <action android:name="android.intent.action.MEDIA_REMOVED" /> <!-- 须有的固定写法 --> <data android:scheme="file" > </data> </intent-filter> <intent-filter> <!-- 拨出电话事件 --> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> <!-- priority=接收级别。-1000~1000,默认0,正1000最高-在系统信息app之前拦截到 --> <intent-filter android:priority="1000" > <!-- 系统收到短信事件 --> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> </manifest> |
自定义广播
一。创建广播:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// 直接在主界面启动时发出一个广播 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 1.创建意图 Intent i = new Intent(); // 广播频道 i.setAction("com.cuiweiyou.vigilesbroadcast.XINWENLIANBO"); // 新闻联播 // 附加信息 i.putExtra("msg", "全国银民很幸福"); // 2.启动广播 sendBroadcast(i); // 无序广播 //8888888888888888888888888888888888888888888888888888888888888 i = new Intent(); // 类似中央向五保户下发津贴,层层那啥啊 i.setAction("com.cuiweiyou.vigilesbroadcast.TheGreatSupportFromTheLeader"); // 有序广播(意图-慰问五保户,接收者权限-收入最低入围者,必须接收到者-领导特意关照的,回执-感谢信、回礼,标识码, // 初始数据-初始下发资金,额外数据-附加柴米油盐) sendOrderedBroadcast(i, null, null, null, 0, "下发100000元", null); //sendOrderedBroadcast(i, null, new 领导亲戚, null, 0, "下发100000元", null); /** * 广播可以在不同的应用之间传递; * 也可以在同一应用的不同Activity之间传递; * 还可以在应用与服务之间传递 */ } } |
二。收听广播:
新应用。
1.创建接收器:
1)新闻联播观众:
1 2 3 4 5 6 7 8 9 10 |
// 欣慰联播观众,继承自BroadcastReceiver的自定义类 public class VigilesBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String extra = intent.getStringExtra("msg"); // 获取广播的附件信息 Toast.makeText(context, "收到XINWENLIANBO这个广播了:" + extra, 1).show(); } } |
2)省级领导:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** 省领导 **/ public class VigilesOrderedBroadcast1 extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String data = getResultData(); System.out.println("省收到:" + data); // 直接终止下发。除非 // sendOrderedBroadcast(i, null, 指定领导特别关照的, null, 0, "下发100000元", null); //abortBroadcast(); data = "下发50000元"; System.out.println("省继续:" + data); setResultData(data); } } |
3)县领导:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** 县领导 **/ public class VigilesOrderedBroadcast2 extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String data = getResultData(); System.out.println("县收到:" + data); data = "下发10000元"; System.out.println("县继续:" + data); setResultData(data); } } |
4)村干部:
1 2 3 4 5 6 7 8 9 10 11 12 |
/** 村干部 **/ public class VigilesOrderedBroadcast3 extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String data = getResultData(); System.out.println("村干部收到:" + data); data = "下发1000元"; System.out.println("村干部继续:" + data); setResultData(data); } } |
5)无保户:
1 2 3 4 5 6 7 8 9 10 |
//无保户:household enjoying the five guarantees public class VigilesOrderedBroadcastHETFG extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String data = getResultData(); System.out.println("草根收到:" + data + ",谢主隆恩!"); } } |
2.注册接收器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<?xml version="1.0" encoding="utf-8"?> <manifest > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="20" /> <application > <activity android:name=".MainActivity" 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="com.cuiweiyou.vigilesreceiver.VigilesBroadcastReceiver"> <intent-filter> <!-- 收听这个广播 --> <action android:name="com.cuiweiyou.vigilesbroadcast.XINWENLIANBO"/> </intent-filter> </receiver> <!-- ****************************************************************************** --> <!-- 省级领导接收文件 --> <receiver android:name="com.cuiweiyou.vigilesreceiver.VigilesOrderedBroadcast1"> <!-- 级别1000,最高,最先收到 --> <intent-filter android:priority="1000"> <!-- 中央下发的关怀 --> <action android:name="com.cuiweiyou.vigilesbroadcast.TheGreatSupportFromTheLeader"/> </intent-filter> </receiver> <!-- 县领导接收文件 --> <receiver android:name="com.cuiweiyou.vigilesreceiver.VigilesOrderedBroadcast2"> <intent-filter android:priority="500"> <action android:name="com.cuiweiyou.vigilesbroadcast.TheGreatSupportFromTheLeader"/> </intent-filter> </receiver> <!-- 村干部接收文件 --> <receiver android:name="com.cuiweiyou.vigilesreceiver.VigilesOrderedBroadcast3"> <intent-filter android:priority="200"> <action android:name="com.cuiweiyou.vigilesbroadcast.TheGreatSupportFromTheLeader"/> </intent-filter> </receiver> <!-- 五保户 --> <receiver android:name="com.cuiweiyou.vigilesreceiver.VigilesOrderedBroadcastHETFG"> <!-- 接收级别为1,比默认值0稍微高,最后接收到 --> <intent-filter android:priority="1"> <!-- 领导关怀 --> <action android:name="com.cuiweiyou.vigilesbroadcast.TheGreatSupportFromTheLeader"/> </intent-filter> </receiver> </application> </manifest> |
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/271.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设