这是我第一次使用广播接收器,我认为这比这更直接。我的班级看起来像这样:
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,然后重启活动或其他东西。 我用谷歌搜索了几天,试图了解它们是什么以及它们是如何工作的......请帮忙!
答案 0 :(得分:0)
嗯,该方法的类型为void
,因此返回值是不可能的。此外,调用类将是BroadcastManager
或LocalBroadcastManager
,因此您无权访问潜在的返回值。
您可以在BroadcastReceiver
内注册自定义侦听器,但这意味着要保留不必要的引用。
在你的情况下我会做的是在“NO”块中使用自定义“action”字符串触发另一个广播:
else{
Log.d("Network Available ", "NO" + getResultCode());
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(YOUR_CUSTOM_ACTION_NAME));
}
在需要的地方注册该事件的监听器并处理其中的行为。