接受系统广播

广播接收器:

新建一个类,让它继承自 BroadcastReceiver,并重写父类的 onReceive() 方法就行了。这样当有广播到来时,onReceive() 方法就会得到执行,具体的逻辑就可以在这个方法中处理。

一、动态注册监听网络变化


public class MainActivity extends Activity {
    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
        }
    }
}
1. 创建 IntentFilter 实例,添加相应 action。
2. 写好 Receiver,创建 Receiver 实例。
3. 调过 registerReceiver() 注册。
4. 通过 unregisterReceiver() 取消注册。

二、静态注册实现开机启动


  • 动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势。
  • 但是它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在 onCreate( )方法中的。
  • 静态注册的方式可以在程序未启动时接收广播。
修改 AndroidManifest.xml:

......
    
    
    
......
        
            
                
             
        

    

        
            
                
             
        

注意:

不要在 onReceive() 方法中添加过多的逻辑或者进行任何的耗时操作,因为在广播接收器中是不允许开启线程的,当 onReceive() 方法运行了较长时间而没有结束时,程序就会报错。因此广播接收器更多的是扮演一种打开程序其他组件的角色,比如创建一条状态栏通知,或者启动一个服务等。

你可能感兴趣的:(接受系统广播)