详解Android中BroadCastReceiver组件

2019-12-10 18:57:11王旭

我们看到BootCompleteReceiver注册了“android.intent.action.BOOT_COMPLETED”这个开机广播地址,从安全角度考虑,系统要求必须声明接收开机启动广播的权限,于是我们再声明使用下面的权限: 
经过上面的几个步骤之后,我们就完成了开机启动的功能,将应用运行在模拟器上,然后重启模拟器,控制台打印如下: 

详解Android中BroadCastReceiver组件

如果我们查看已运行的服务就会发现,MsgPushService已经运行起来了。

2.网络状态变化

在某些场合,比如用户浏览网络信息时,网络突然断开,我们要及时地提醒用户网络已断开。要实现这个功能,我们可以接收网络状态改变这样一条广播,当由连接状态变为断开状态时,系统就会发送一条广播,我们接收到之后,再通过网络的状态做出相应的操作。下面就来实现一下这个功能:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.util.Log; 
import android.widget.Toast; 

public class NetworkStateReceiver extends BroadcastReceiver { 

  private static final String TAG = "NetworkStateReceiver"; 

  @Override 
  public void onReceive(Context context, Intent intent) { 
    Log.i(TAG, "network state changed."); 
    if (!isNetworkAvailable(context)) { 
      Toast.makeText(context, "network disconnected!", 0).show(); 
    } 
  } 

  /** 
   * 网络是否可用 
   */ 
  public static boolean isNetworkAvailable(Context context) { 
    ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] info = mgr.getAllNetworkInfo(); 
    if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
          return true; 
        } 
      } 
    } 
    return false; 
  } 
} 

再注册一下这个接收者的信息: