2
我有一個BroadcastReceiver,我用它來知道手機是否通過WiFi連接到Internet。Android WIFI_STATE_CHANGE和STATE_CHANGE多次觸發
我使用這種方式
<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類,我的代碼
@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獲得wifi狀態變化3次。
我一整天都試圖解決它,我嘗試使用SharedPreferences,但它不工作,因爲每次Receiver獲取事件時,都會啓動一個新的AsyncTask,這使得更改SharedPreferences成爲不可能,直到所有後臺任務都完成完成。
我真正想要的,就是解僱getData(1)一次。無論如何,在第一次通話之後就不再接收了嗎?
任何想法將是非常讚賞
謝謝