Broadcast Receiver用于接收并处理广播通知(broadcast announcements)。
多数的广播是系统发起的,如地域变换、电量不足、来电来信等。程序也可以播放一个广播。
程序可以有任意数量的 broadcast receivers来响应它觉得重要的通知。
broadcast receiver可以通过多种方式通知用户:启动activity、使用NotificationManager、开启背景灯、振动设备、播放声音等,最 典型的是在状态栏显示一个图标,这样用户就可以点它打开看通知内容。
通常我们的某个应用或系统本身在某些事件(电池电量不足、来电来短信)来临时会广播一个Intent出去,我们可以利用注册一个Broadcast Receiver来监听到这些Intent并获取Intent中的数据。
广播接收者的生命周期就onReceive()方法,当该方法执行完后,返回,该广播接受者对象即可被销毁,结束了生命周期
一般使用方式,有静态注册,和动态注册
静态注册:
1.新建一个类继承BroadcastReceiver
实现onReceive(Context context, Intent intent)方法,在这个方法里写你想做的操作的代码
2.在activity中声明一个静态变量
private static final String action ="com.example.bcr.new_life";
3.然后对一个按钮或者其他的点击实现
Intent intent = new Intent(action);
sendBroadcast(intent);
4.然后在清单中加入
- <receiver android:name="com.example.bcr.MyBroadcastReceiver" >
- <intent-filter >
- <action android:name="com.example.bcr.new_life" />
- </intent-filter>
- </receiver>
5.启动应用程序,即可看到点击按钮,接受者接收到信息,并且执行
动态注册
1.新建一个类继承BroadcastReceiver,并且实现onReceive(Context context, Intent intent)方法,在这里写你要写的代码
2.在activity中,
- <span style="font-size:18px;">public class MainActivity extends Activity {
- private MyBroad broad;
- private static final String action ="com.example.bcr.new_life";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
-
- public void btn_register() {
- broad = new MyBroad();
- IntentFilter filerFilter =new IntentFilter(action<span style="font-family: Arial, Helvetica, sans-serif;">);</span>
- registerReceiver(broad, filerFilter);
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- unregisterReceiver(broad);
- }
-
- }</span>
有注册广播,就有注销广播
3.不用配置AndroidMenifest.xml,直接运行程序
下面来一个监听系统电量的案例
-
- <uses-permission android:name="android.permission.BATTERY_STATS"></uses-permission>
-
-
- public class MyBroad extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
- int level = intent.getIntExtra("level", 0);
- int total = intent.getIntExtra("scale",100);
- Toast.makeText(context, "当前电量:"+(level*100)/total+"%", Toast.LENGTH_SHORT).show();
- }
- }
- }
-
-
-
- public class MainActivity extends Activity {
- private MyBroad broad;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- broad = new MyBroad();
- IntentFilter filerFilter =new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
- registerReceiver(broad, filerFilter);
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- unregisterReceiver(broad);
- }
-
- }
第二个实例:开机启动
-
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-
-
- <receiver android:name=".MyPower">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED"></action>
- <category android:name="android.intent.category.HOME"></category>
- </intent-filter>
- </receiver>
-
-
-
- public class MyPower extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- Intent intent2 = new Intent(context,MainActivity.class);
- intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent2);
- }
- }