BroadcastReceiver广播接收器基础

BroadcastReceiver 广播接收器

广播接收器,主要是用于app注册一些指定事件的广播接收器,系统在这些事件被触发的时候,会通知到注册的广播接收器,然后广播接收器在onReceive函数中对接收到的通知进行处理;
广播接收器的两种注册方式:
静态注册:
<receiver android:name=".SMSBroadcastReceiver" >
  <intent-filter>
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver >

动态注册:
IntentFilter intentFilter=new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mSmsBroadcastReceiver ,intentFilter);

//解注册
unregisterReceiver(receiver);

BroadcastReceiver的生命周期
创建 BroadcastReceiver对象 -> onReceive -> 对象调用结束;

Broadcast的onReceive一般调用最长时间为10秒(也有可能更短),如果超过10秒,就很有可能被系统给结束掉;所以一些耗时的任务,我们需要发给Service来进行处理;
(当初写的一个简单的短信自动回复的app,在onReceive里面创建了一个线程,并且将处理回复的任务交给这个线程处理,后来发现经常没有回复短信,到后来才知道BroadcastReceiver有这个限制)

其他广播接收
广播接收器另外的注册方法:

private void registerScreenActionReceiver(){
  final IntentFilter filter = new IntentFilter();
  filter.addAction(Intent.ACTION_SCREEN_OFF);
  filter.addAction(Intent.ACTION_SCREEN_ON);
  registerReceiver(receiver, filter);
}

private BroadcastReceiver receiver = new BroadcastReceiver(){
  @Override
  public void onReceive(final Context context, final Intent intent) {
    // Do your action here

  }
}

通过一个IntentFilter,将对应的Action加进去,然后进行注册;上面是注册屏幕锁定和解锁的广播接收器注册;receiver 是一个 Broadcast的匿名类实现;

开关机事件Action,可以在Manifest.xml里面,增加该Action对应的广播接收器配置
<action android:name="android.intent.action.BOOT_COMPLETED" /> 开机启动完毕
<action android:name="android.intent.action.ACTION_SHUTDOWN" /> 关机
android.intent.action.BATTERY_CHANGED 电量变化(电量变化可以在registerReceiver时候,返回的Intent中获取电量信息)
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 网络状态变化

需要权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>

还有其他的广播接收器使用,需要在以后的学习中慢慢整理出来;

时间: 11-16

BroadcastReceiver广播接收器基础的相关文章

Android组件系列----BroadcastReceiver广播接收器

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3960623.html 联系方式:[email protected] [正文] 一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和代码量来看,广播无疑是最迷你的Android 组件,实现往往只需几行代码.广播对象被构造出

android4大组件之BroadcastReceiver广播接收器

1.在上下文之外启动一个activity时需要在intent.setTag(Intent.FLAG_ACTIVITY_NEW_TASK);因为activity启动后需要放在任务栈中,一般情况下都是直接从桌面上点击应用图标进入应用,此时系统会为应用创建一个任务栈,但是广播是不需要任务栈的,如果从广播启动activity,那么该activity就没有可以存放它的任务栈. 2.abortBroadcast();阻止其他广播接收者收到这条广播,但是如果有序广播设置了最终接收者,那么最终接受者一定会接受到

Android四大基本组件(1)之Activity与BroadcastReceive广播接收器

Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.Activity (1)应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应. (2)Activity之间通过Intent进行通信.在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据. (3)典型的动作类型有:M AIN(activity的门户).VIE

android在广播接收器BroadcastReceiver里面再进行发送广播,造成当前广播接收器不断循环执行问题

最近在公司处理项目时,用到锁屏状态弹出activity进行提示,类似QQ消息弹屏提示的功能.当中用到了,假如该弹出activity已经位于锁屏界面外时,将不进行再次弹窗,而是发送广播进行通知数据更新,但是在广播接收器里面的某个步骤进行了再次发送通知的操作,发现该广播接收器变成了一个死循环的执行.经过仔细检查,发现没有任何一处用错action.  最终将该广播接收器里面的发送广播语句注释,死循环不在.代码如下: 注:里面的所有action都经过仔细检查,使用均正确,没任何错误,或者引用错误. pa

android四大组件之广播接收器BroadcastReceiver

Android有一个非常重要的特性,就是广播.也可以将广播看做是通信机制.  Android四大组件: Activity, service, broadcastReceiver 和contentProvider, 只有Activity和service有完整的生命周期, 其他 broadcastReceiver 和contentProvider 都没有.  broadcastReceiver 本质上是一个监听器, 负责监听系统应用发出的广播(BroadCast). broadcastReceive

Android基础(4)——广播接收器

在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的.Android提供了一整套完整的API,允许应用程序自由地发送和接收广播.发送广播就是借助之前了解过的Intent,接收广播则需要用到广播接收器(Broadcast Receiver).. 1.广播的类型 标准广播:Normal broadcast,是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播

BroadcastReceiver广播接收者(四)——本地广播LocalBroadcastManager以及在onReceive()中弹出Dialog

MainActivity如下: package cc.cv; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import an

扣丁学堂笔记第11天广播接收器、短信与闹钟服务

1.默认广播 MainActivity package com.example.broadcastreceivertest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCre

[Android]三种广播接收器1

/************ 动态注册 ************/ ActivityMain.java  package home.lee.broadcastreceiver; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.Inten