我的應用的部分功能是掃描並顯示WiFi接入點列表,然後連接到用戶選擇的接入點。我有這個功能工作。現在,我也希望在連接「通過」時得到通知。這應該相當簡單,但我發現自己絆倒了。WIFI_STATE_CHANGED_ACTION意圖在連接到WiFi接入點時未收到?
我已閱讀了SO的各種帖子,他們都提到註冊WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION
或WifiManager.WIFI_STATE_CHANGED_ACTION
。但是,這些都不適合我。任何人都可以發現此代碼中的任何錯誤? (我離開了該做的掃描和東西的部分)
預期的行爲:一旦連接成功(即,當我看到通知欄上的「連接」圖標)時,應該收到廣播,我應該看到烤麪包。
觀察到的行爲:第一次啓動該應用時,接收的廣播,並且每當切換回它(即,每當onResume()
被調用;或我懷疑,每當我註冊的意圖)
public class WifiScanActivity extends Activity {
WifiManager mainWifi;
WifiReceiver mWifiReceiver;
IntentFilter mIntentFilter;
private final static String TAG = "WifiScanActivity";
public static final String INTENT_FOR_WIFI_CONNECTED =
WifiManager.WIFI_STATE_CHANGED_ACTION;
// public static final String INTENT_FOR_WIFI_CONNECTED =
// WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiReceiver = new WifiReceiver();
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
mIntentFilter.addAction(INTENT_FOR_WIFI_CONNECTED);
registerReceiver(mWifiReceiver, mIntentFilter);
mainWifi.startScan();
}
protected void onPause() {
unregisterReceiver(mWifiReceiver);
super.onPause();
}
protected void onResume() {
registerReceiver(mWifiReceiver, mIntentFilter);
super.onResume();
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
Log.d(TAG,
"In WifiReceiver: Broadcast Received = " + intent.getAction());
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent
.getAction())) {
// Display the ListView and connect to the selected AP
} else if (INTENT_FOR_WIFI_CONNECTED.equals(intent.getAction())) {
if (WifiManager.WIFI_STATE_ENABLED == intent.getIntExtra(
WifiManager.EXTRA_WIFI_STATE, 0)) {
displayNetworkInfo();
}
/*if(true == intent.getBooleanExtra(
* WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){
* displayNetworkInfo();
}*/
}
}
}
private void displayNetworkInfo() {
WifiInfo wifiInfo = mainWifi.getConnectionInfo();
String ssid = wifiInfo.getSSID();
int ip = wifiInfo.getIpAddress();
String message = "Connection established.\nSSID = " + ssid
+ "; IP Address = " + Helper.displayIpAddress(ip);
Log.d(TAG, message);
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
如果我取消註釋WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION的代碼,我根本沒有看到廣播被接收到。
注:我知道,連接成功,因爲我看到了Android的無線網絡設置屏幕中的地位。
您鏈接到顯示如何文章在掃描結果可用時接收廣播。我的應用程序已經成功地做到了。我需要的是一旦接入點的WiFi連接成功就立即獲得廣播。我在文章中沒有看到與此相關的任何內容。 – curioustechizen