问题描述
我的应用正在监控网络连接变化以解码离线和在线案例。在这里,我只想在应用程序处于前台时持续监控这一点。我们如何使用 broadcastReceiver 实现这一点。 我正在使用以下代码在后台运行。但一旦应用关闭或在后台运行,它也能正常工作。
public class NetworkChangeReceiver extends broadcastReceiver {
@Override
public void onReceive(final Context context,final Intent intent) {
boolean mIsConnected = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
mIsConnected = true;
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
mIsConnected = true;
}
}
if (mIsConnected) {
Log.d("mIsConnected11",mIsConnected+"");
}
else {
Log.d("mIsConnected11",mIsConnected+"");
}
}
提前致谢!
解决方法
ConnectivityManager.NetworkCallback
对我来说就像一个魅力,它会在我关闭互联网或断开 wifi 连接以及重新连接时立即通知我。
然后我建议在您的应用程序类中使用它,然后您可以在您的基本活动中注册本地广播接收器。
private ConnectivityManager.NetworkCallback callback;
@Override
public void onCreate() {
super.onCreate();
this.initNetworkMonitor();
}
void initNetworkMonitor(){
this.callback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
super.onAvailable(network);
Log.d("UE_MONITOR","onAvailable");
Intent intent=new Intent(Constants.NETWORK_STATE_CHANGE);
intent.putExtra(Constants.NETWORK_STATE_CHANGE,NetworkState.AVAILABLE);
LocalBroadcastManager.getInstance(AppController.this).sendBroadcast(intent);
}
@Override
public void onLosing(@NonNull Network network,int maxMsToLive) {
super.onLosing(network,maxMsToLive);
Log.d("UE_MONITOR","onLosing");
Intent intent=new Intent(Constants.NETWORK_STATE_CHANGE);
intent.putExtra(Constants.NETWORK_STATE_CHANGE,NetworkState.LOSING);
LocalBroadcastManager.getInstance(AppController.this).sendBroadcast(intent);
}
@Override
public void onLost(@NonNull Network network) {
super.onLost(network);
Log.d("UE_MONITOR","onLost");
Intent intent=new Intent(Constants.NETWORK_STATE_CHANGE);
intent.putExtra(Constants.NETWORK_STATE_CHANGE,NetworkState.LOST);
LocalBroadcastManager.getInstance(AppController.this).sendBroadcast(intent);
}
@Override
public void onUnavailable() {
super.onUnavailable();
Log.d("UE_MONITOR","onUnavailable");
Intent intent=new Intent(Constants.NETWORK_STATE_CHANGE);
intent.putExtra(Constants.NETWORK_STATE_CHANGE,NetworkState.UNAVAILABLE);
LocalBroadcastManager.getInstance(AppController.this).sendBroadcast(intent);
}
};
ConnectivityManager manager=((ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE));
manager.registerNetworkCallback(new NetworkRequest.Builder().build(),callback);
}
NetworkState
是一个枚举,您可以根据自己的喜好进行设置。