| 
 | 
 
 本帖最后由 liu 于 2018-12-21 15:24 编辑  
 
BroadcastReceiver简介 
 
  
 
 
       广播接收器,四大组件之一,是一种全局的监听器,用于监听系统全局的广播消息。它可以监听或接收应用APP发出的广播消息,并做出响应 
 
 
BroadcastReceiver的生命周期: 
 
从对象调用它开始,到onReceiver方法执行完成之后结束。另外,每次广播被接收后会重新创建BroadcastReceiver对象,并在onReceiver方法中执行完就销毁,如果BroadcastReceiver的onReceiver方法中不能在10秒内执行完成,Android会出现ANR异常。所以不要在BroadcastReceiver的onReceiver方法中执行耗时的操作。 
如果需要在BroadcastReceiver中执行耗时的操作,可以通过Intent启动Service来完成。但不能绑定Service。 
如果在Activity中注册了BroadcastReceiver,当这个Activity销毁的时候要主动撤销注册否则会出现异常 
 
BroadcastReceiver类型: 
 
无序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,并且是没有先后顺序 
有序广播:所有跟广播的intent匹配的广播接收者都可以收到该广播,但是会按照广播接收者的优先级来决定接收的先后顺序 
 
创建BroadcastReceiver: 
 
[Java] 纯文本查看 复制代码 //继承BroadcastReceiver,实现onReceive(Context context, Intent intent)方法public class MyBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        
    }
} 
 
注册BroadcastReceiver: 
 
1、静态注册 
 
在AndroidManifest.xml文件中注册,通过这种方式注册的广播为常驻型广播 
[Java] 纯文本查看 复制代码   <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.MyBroadcastReceiver" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver> 
 
2、动态注册 
 
在Java代码中进行注册,通过这种方式注册的广播为非常驻型广播,在Activity结束时要调用unregisterReceiver(BroadcastReceiver receiver)方法结束它 
[Java] 纯文本查看 复制代码 package com.company.helloworld.firstapplication;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    private MyBroadcastReceiver receiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView() {
        receiver = new MyBroadcastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.MyBroadcastReceiver");
        registerReceiver(receiver, intentFilter);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
}
 
 
一些常用的Android系统广播action: 
 
监听网络变化                                        android.net.conn.CONNECTIVITY_CHANGE 
屏幕锁屏                                              Intent.ACTION_CLOSE_SYSTEM_DIALOGS 
屏幕被关闭                                           Intent.ACTION_SCREEN_OFF 
屏幕被打开                                           Intent.ACTION_SCREEN_ON 
重启设备                                              Intent.ACTION_REBOOT 
屏幕锁屏                                              Intent.ACTION_CLOSE_SYSTEM_DIALOGS 
充电时或电量发生变化                           Intent.ACTION_BATTERY_CHANGED 
插入外部储存装置(如SD卡)                 Intent.ACTION_MEDIA_CHECKING 
设备当前设置被改变时(界面语言、设备方向等)           Intent.ACTION_CONFIGURATION_CHANGED 
 
 
 
 
 
 
 
 
 
 
 |   
 
 
 
 |