android - 网络从 GPRS 切换到 Wifi 时收到 3 个广播

标签 android

当网络从GPRS切换到Wifi时,我收到了3次android.net.conn.CONNECTIVITY_CHANGE的Broadcast。

在onReceive()中,我使用下面的代码来判断Wifi是否连接上。但是我也收到了 3 次“Wifi Connected”的消息,doSomething() 被调用了 3 次。

ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(wifiInfo.isConnected()) {
    Log.v(Constant.APP_NAME, "Wifi Connected.");
    doSomething();
}

我只想接收一条“Wifi Connected”消息,并且只调用 doSomething() 一次。 我该怎么办?

谢谢。抱歉我的英语不好。

最佳答案

创建一个 bool 标志值来检查消息 如果您希望它可以从其他地方访问,请将其设置为静态 例如

public static boolean flagConnected = false;

ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(wifiInfo.isConnected() && flagConnected == false) {
flagConnected = true;
Log.v(Constant.APP_NAME, "Wifi Connected.");
doSomething();
}

在 doSomething() 之后;您可以再次将标志的值更改为 false

ClassName.flagConnected = false;

关于android - 网络从 GPRS 切换到 Wifi 时收到 3 个广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13066438/

相关文章:

android - Gradle任务中的类型是什么?

Android使用外部文件资源

android - ClassCastException:android.widget.Button

android - Jetpack compose 如何等待动画结束

android - 无法理解空引用检查

android - SQLite 的精简版/嵌入式替代品(在 Android 中)?

java - 未找到 Android 源?

android - 在 mac 中添加 android 时出现 Cordova 错误

java - Android 偏好 onclick 事件

android - 从接收者自己的 onReceive() 方法中注销 'dynamic' BroadcastReceiver 是否可以?