私のアプリの機能の一部は、WiFiアクセスポイントのリストをスキャンして表示し、ユーザーが選択したものに接続することです。私はこの機能が働いています。今、私はまた、接続が "通過する"ときに通知されることを望みます。これはかなりシンプルなはずですが、私は自分がつまずくと感じます。WiFiアクセスポイントに接続したときにWIFI_STATE_CHANGED_ACTIONインテントが受信されませんでしたか?
私はここで様々な投稿を読んでおり、すべて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の無線LAN設定画面でステータスを確認するので、接続が成功したことを知っています。状態の後に放送を取得するには
あなたはどのようにショーにリンクされている記事スキャン結果が利用可能なときにブロードキャストを受信する。私のアプリはすでにそれを成功させています。私が必要とするのは、アクセスポイントへのWiFi接続が成功するとすぐにブロードキャストを取得することです。私はこの記事に関連するものは何も見ませんでした。 – curioustechizen