デバイスがネットワークを切り替えたときに通知されることを期待していますが、奇妙な理由により、SO に関するドキュメントとさまざまな例にもかかわらず、この特定のアクションが受信者に送信されません。
これが私のコードです
受信機:
BroadcastReceiver connectedToLocalWifiReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
Log.d(TAG, "ACTION='" + action +"'"); //<-- WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION never turns up here
if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){
//this block of code is never called
} else {
// ditto for this block
}
}
}
};
登録: ネットワークに接続する直前のコードで、受信機を登録します。私はそれを他のアクションに登録しようとしましたが、それらは(ConnectivityManager.CONNECTIVITY_ACTION
たとえば)現れますが、SUPPLICANT_CONNECTION_CHANGE_ACTION
何も得られません。
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
registerReceiver(connectedToLocalWifiReceiver, intentFilter);
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
したがって、この時点で、wifiは実際には現在のネットワークから切断され、指定したネットワークに接続されますが、何もブロードキャストせずに接続されます.
明らかに間違っているものは何も見えませんが、かなり基本的なものが欠けているに違いありません。
私のマニフェストのアクセス許可はこのように設定されていますが、実際にwifiの切り替えが正しく行われていることを考えると、アクセス許可はそれと関係がある可能性があります。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
私が見落としていることを知りたいです。