在Android 7上,我知道我必须以编程方式注册CONNECTIVITY_ACTION
接收器,而不是在清单中注册。
我登记的那一刻,接收器就响了。我怎么才能防止这种情况?
在我的应用程序类中,我这样做:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
IntentFilter filter = new IntentFilter();
filter.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(new NetworkUpdateReceiver(), filter);
}
然后立即调用onReceive
方法:
public class NetworkUpdateReceiver extends BroadcastReceiver {
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
Log.e("NetworkUpdateReceiver", "onReceive");
在此之后,它正常工作-每次网络打开或关闭时,我都会得到一个方法调用。
发布于 2017-04-21 10:50:25
BroadcastReceiver.java有isInitialStickyBroadcast()方法,所以当您注册接收者时,要忽略连接性更改,您可以编写这样的代码:
public class NetworkUpdateReceiver extends BroadcastReceiver {
private Context context;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (isInitialStickyBroadcast()) {
Log.i("NetworkUpdateReceiver", "onReceive ignored, sticky");
return;
}
Log.i("NetworkUpdateReceiver", "Actual onReceive");
https://stackoverflow.com/questions/41857523
复制相似问题