BroadcastReceiver广播接受者
广播接收器的两种注册方式:
1)动态注册:在代码中注册,创建一个IntentFilter(意图过滤器)对象,设置想要就收的广播,在onCreate()方法中通过调用registerReceiver()方法来注册广播接收器,在onDestroy()方法中通过调用unregisterReceiver()方法来注销广播接收器。
2)静态注册:在AndroidManifest.xml文件中注册,<Receiver>标签注册类,通过<IntentFilter>标签中的<Action>来过滤意图。静态注册的好处是,当程序关闭或者没有打开的时候,同样可以接收相关的广播。比如实现开机启动
面试:生命周期
1)广播接受者的生命周期是非常短暂的,在接收到广播的时候创建,onReceive()方法结束之后销毁
2)广播接受者中不要做一些耗时的工作,否则会弹出Application No Response错误对话框
3)最好也不要在广播接受者中创建子线程做耗时的工作,因为广播接受者被销毁后进程就成为了空进程,很容易被系统杀掉
4)耗时的较长的工作最好放在服务中完成
*无序广播
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter>
- <action android:name="com.example.administrator.broadcastreceiver.MyBroadcastReceiver"></action>
- </intent-filter>
- </receiver>
- </application>
- public void send(View v){
- Intent intent = new Intent();
- intent.putExtra("name","王者");
- intent.putExtra("age",27);
- intent.setAction("com.example.administrator.broadcastreceiver.MyBroadcastReceiver");
- sendBroadcast(intent);
- }
- public class MyBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String name = intent.getStringExtra("name");
- int age = intent.getIntExtra("age",30);
- Log.i("Main",name+"--"+age);
- }
- }
*有序广播
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name=".MyBroadcastReceiver1">
- <intent-filter android:priority="200">
- <action android:name="com.example.adminastrator.broadcastreceiver.MyBroadcastReceiver"></action>
- </intent-filter>
- </receiver>
- <receiver android:name=".MyBroadcastReceiver2">
- <intent-filter android:priority="100">
- <action android:name="com.example.adminastrator.broadcastreceiver.MyBroadcastReceiver"></action>
- </intent-filter>
- </receiver>
- </application>
- public void send(View v){
- Intent intent = new Intent();
- intent.putExtra("name","王者");
- intent.setAction("com.example.adminastrator.broadcastreceiver.MyBroadcastReceiver");
- sendOrderedBroadcast(intent,null);
- }
- public class MyBroadcastReceiver1 extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String name = intent.getStringExtra("name");
- // abortBroadcast(); //拦截广播
- setResultData("哈哈"); //发送给优先级低的程序
- Log.i("Main",name+"----1");
- }
- }
- public class MyBroadcastReceiver2 extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String name = intent.getStringExtra("name");
- String data = getResultData();
- Log.i("Main",name+"-"+data+"----2");
- }
- }
*自动回复短信
- <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
- <uses-permission android:name="android.permission.RECEIVE_SMS"/>
- <uses-permission android:name="android.permission.SEND_SMS"/>
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="com.example.broadcastReceiver.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.example.broadcastReceiver.MyReceiver">
- <intent-filter android:priority="500">
- <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
- </intent-filter>
- </receiver>
- </application>
- public class MyReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- System.out.println("有短信来了");
- Bundle bundle = intent.getExtras();
- Object[] objs = (Object[]) bundle.get("pdus");
- for (Object obj : objs) {
- SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj);
- String str = sms.getMessageBody();
- String phone = sms.getOriginatingAddress();
- Log.i("aaaaaaaaaaaa", phone+":"+str);
- if("114".equals(phone)){
- SmsManager manager = SmsManager.getDefault();
- manager.sendTextMessage(phone, null, "fuck you", null, null);
- }
- }
- }
- }
* 外拨电话添加前缀
- public class MyBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- //收到外拨电话。
- String phone = getResultData();
- String name = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
- setResultData("10193"+phone);
- System.out.println("有外拨电话");
- Log.i("Main",phone);
- }
- }
* 监听网络状态
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name=".MyReceiver">
- <intent-filter android:priority="100">
- <action android:name="android.net.conn.CONNECTIVITY_CHANGE"></action>
- </intent-filter>
- </receiver>
- </application>
- public class MyReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Service.CONNECTIVITY_SERVICE);
- NetworkInfo networkInfo = cm.getActiveNetworkInfo();
- if(networkInfo == null || !networkInfo.isConnected()){
- Log.i("Main","没有网络");
- }else{
- Log.i("Main","有网络");
- }
- }
- }
*监听网络状态(动态注册)
- private MyReceiver myReceiver;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- myReceiver = new MyReceiver();
- }
- @Override
- protected void onResume() {
- super.onResume();
- IntentFilter filter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
- registerReceiver(myReceiver,filter);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- unregisterReceiver(myReceiver);
- }
- class MyReceiver extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Service.CONNECTIVITY_SERVICE);
- NetworkInfo networkInfo = manager.getActiveNetworkInfo();
- if(networkInfo == null||!networkInfo.isConnected()){
- Log.i("Main","没有网络");
- }else{
- Log.i("Main","有网络");
- }
- }
- }
* 开机自启动
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filter >
- <action android:name="android.intent.action.BOOT_COMPLETED"></action>
- </intent-filter>
- </receiver>
- </application>
- public class MyBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Intent intent1 = new Intent();
- intent1.setClass(context,MainActivity.class);
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- }
- }
BroadcastReceiver广播接受者的更多相关文章
- Android BroadcastReceiver广播接受者
静态注册 配置清单表注册:只要曾经注册过哪怕关闭也能调用 方式一:sendBroadCastReceive 广播的步骤: 发送 无序广播,普通广播 (1).发送方 ...
- BroadcastReceiver广播接受者简单使用
1.注册BrocadcastReceiver <receiver android:name=".FirstReceiver" > <!-- 指定能够接收的广播类型 ...
- BroadcastRecevier广播接受者
广播接收器的两种注册方式: 1)动态注册:在代码中注册,创建一个IntentFilter(意图过滤器)对象,设置想要就收的广播,在onCreate()方法中通过调用registerReceiver() ...
- Android四大组件之一:BroadCastReceiver(广播接收者)
广播接受者是(BroadCastReceiver)是Android中的地大组件之一,之前学习了一些关于BroadCastReceiver方面的知识,今天回过头来发现已经快忘记的差不多了,毕竟现在是刚开 ...
- android84 广播接受者
#广播接收者(广播接受者进程关闭了也能接收到广播,系统会在清单文件中找哪个广播接受者可以收到这条广播,然后去启动这个接受者的进程,找不到则广播发了就发了没人收到而已) * 现实中:电台要发布消息,通过 ...
- 在Service中使用广播接受者
1.清单文件 <service android:name="com.example.callmethod.MyService"></service> 2.开 ...
- Android初级教程IP拨号器初识广播接受者
需求:输入ip号码并且保存在本地,监听打电话广播,如果电话号码以0开头,则加上ip区号拨打. 首先定义一个页面布局: <LinearLayout xmlns:android="http ...
- Android 学习笔记 BroadcastReceiver广播...
PS:不断提升自己,是件好事... 学习内容: 1.BroadcastReceiver的使用.. 2.通过BroadcastReceiver去启动Service... 1.BroadcastRecei ...
- Android的BroadcastReceiver 广播 短信拦截
如何去理解BroadcastReceiver(广播)?其实可以这样想,首先我们要有一个发送广播的"媒体",在这个例子中,我们暂且用activity组件作为这个媒体,当然以后会用到s ...
随机推荐
- div 只显示两行超出部分隐藏
; -webkit-box-orient: vertical;line-height: 26px } <td rowspan="2" colspan="2" ...
- jQuery - ajaxUpLoad.js
ajaxFileUpload是一个异步上传文件的jQuery插件 语法:$.ajaxFileUpload([options]) options参数说明: 参数 作用 url 上传处理程序地址 file ...
- mysql 案例 ~ pt-archiver 归档工具的使用
一 简介:今天咱们来聊聊pt-archiver的使用 二 相关参数 相关参数1 --statistics 结束的时候给出统计信息:开始的时间点,结束的时间点,查询的行数,归档的行数,删除的行数,以 ...
- Dom4j向XML中指定位置添加、删除、修改节点——(五)
需求: 在第一本书作者后面增加描述 <描述>好书</描述> 思路:获取书下面下的所有节点(一个list集合),在list集合指定位置添加一个元素(list.add(index ...
- RPC原理
RPC同步调用流程:(异步另说) 1)服务消费方(Client)以本地的调用方式调用远程服务. 2)客户端代理(Client Stub)接收到调用后负责将方法.参数等组装成能够进行网络传输的消息体. ...
- SpringBoot整合SpringDataElasticSearch操作ES
(1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- 腾讯云外网IP直通后,遇到网络问题
通过内网机器,先重启网卡 service network restart cd /usr/local/etc ./modify_route.sh
- AT91RM9200---SMC简介
1.前言 SMC(Static Memory Controller)Atmel 9200静态存储控制器的简称,它可以产生信号来控制外部静态存储和外设.SMC可通过编程寄存器来进行配置. 它有8路片选和 ...
- Windows CreateFont:创建自己的字体
原文地址:http://blog.csdn.net/softn/article/details/51718347 前面无论是使用文本输出函数还是 static 控件,字体都是默认的,比较丑陋,我们完全 ...
- zabbix3.0对tcp连接数和状态的监控优化
zabbix3.0对tcp连接数及状态的监控优化 之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以 ...