运行Android广播接收器,而应用程序只有前台



我的App正在监控网络连接变化,解码离线和在线情况。这里我想只在应用在前台时持续监控这个。我们如何使用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是一个枚举,您可以根据自己的喜好设置。

相关内容

最新更新