使用Broadcastreceiver获取网络状态更改

时间:2013-11-26 07:55:18

标签: android broadcastreceiver

这是我第一次使用广播接收器,我认为这比这更直接。我的班级看起来像这样:

public class NetworkChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

    boolean isConnected = wifi != null && wifi.isConnectedOrConnecting() || mobile != null && mobile.isConnectedOrConnecting(); 
    if (isConnected) {
        Log.d("Network Available ", "YES" + getResultCode());

    }else{
        Log.d("Network Available ", "NO" + getResultCode());

    }
}
}

我在我的应用程序中注册了这个

     mReceiver = new NetworkChangeReceiver();
    registerReceiver(mReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

这工作正常,当我关闭我的wifi时,我在log.d中得到“NO”但是我怎么能得到“发生”的东西?我想要一个Return-value或者我可以使用的东西,例如,如果isConnected为false,然后重启活动或其他东西。 我用谷歌搜索了几天,试图了解它们是什么以及它们是如何工作的......请帮忙!

1 个答案:

答案 0 :(得分:0)

嗯,该方法的类型为void,因此返回值是不可能的。此外,调用类将是BroadcastManagerLocalBroadcastManager,因此您无权访问潜在的返回值。

可以BroadcastReceiver内注册自定义侦听器,但这意味着要保留不必要的引用。

在你的情况下我会做的是在“NO”块中使用自定义“action”字符串触发另一个广播:

else{
    Log.d("Network Available ", "NO" + getResultCode());
    LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(YOUR_CUSTOM_ACTION_NAME));
}

在需要的地方注册该事件的监听器并处理其中的行为。