Android WIFI_STATE_CHANGE 和 STATE_CHANGE 触发多次
Android WIFI_STATE_CHANGE and STATE_CHANGE fire many times
我有一个 BroadcastReceiver,我用它来了解 phone 是否通过 WiFi 连接到互联网。
我是这样用的
<receiver android:name=".InternetReceiver" >
<intent-filter android:priority="0">
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
在 InternetReceiver class 中,我有代码
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
this.intent = intent;
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi != null && mWifi.isAvailable())
{
if (mWifi.isConnected())
{
Handler h = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if (msg.what == 1)
{
getData(1);
}
else
{
Log.e("Spygen", "No Internet connection");
}
}
};
new InternetChecker().isNetworkAvailable(h, 3000);
}
}
}
到目前为止,一切似乎都很完美。除此之外,方法 getData(1) 同时被触发 3 次。也就是说,BroadcastReceiver 获取了 3 次 wifi 状态变化。
我整天都在尝试解决它,我尝试使用 SharedPreferences,但它不起作用,因为每次 Receiver 收到事件时,它都会启动一个新的 AsyncTask,这使得更改 SharedPreferences 变得不可能,直到所有后台任务完成了。
我真正想要的是触发 getData(1) 一次。无论如何,在第一个电话之后就停止接收了吗?
任何想法将不胜感激
谢谢
我认为最好确认您要触发 getData 的状态。不能只靠广播。作为启用、禁用和任何小的更改都会触发广播。例如,getWifiState() == WIFI_STATE_ENABLED.
我有一个 BroadcastReceiver,我用它来了解 phone 是否通过 WiFi 连接到互联网。
我是这样用的
<receiver android:name=".InternetReceiver" >
<intent-filter android:priority="0">
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
在 InternetReceiver class 中,我有代码
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
this.intent = intent;
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mWifi != null && mWifi.isAvailable())
{
if (mWifi.isConnected())
{
Handler h = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if (msg.what == 1)
{
getData(1);
}
else
{
Log.e("Spygen", "No Internet connection");
}
}
};
new InternetChecker().isNetworkAvailable(h, 3000);
}
}
}
到目前为止,一切似乎都很完美。除此之外,方法 getData(1) 同时被触发 3 次。也就是说,BroadcastReceiver 获取了 3 次 wifi 状态变化。
我整天都在尝试解决它,我尝试使用 SharedPreferences,但它不起作用,因为每次 Receiver 收到事件时,它都会启动一个新的 AsyncTask,这使得更改 SharedPreferences 变得不可能,直到所有后台任务完成了。
我真正想要的是触发 getData(1) 一次。无论如何,在第一个电话之后就停止接收了吗?
任何想法将不胜感激
谢谢
我认为最好确认您要触发 getData 的状态。不能只靠广播。作为启用、禁用和任何小的更改都会触发广播。例如,getWifiState() == WIFI_STATE_ENABLED.