Я хочу знать, когда устройство подключено к сети Wi-Fi. Проблема в том, что я не получаю намерений от WifiManager.NETWORK_STATE_CHANGED_ACTION
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
LocalBroadcastManager.getInstance(this).registerReceiver(MainActivity.wifiBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.i("LOG", "onReceive"); // This is never executed
}
}, intentFilter);
}
Разрешения
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name = "android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name = "android.permission.CHANGE_WIFI_STATE" />
Требуются ли для WifiManager.NETWORK_STATE_CHANGED_ACTION другие разрешения?
Здесь LocalBroadcastManager работать не будет. LocalBroadcastManager будет слушать только намерение, отправленное через LocalBroadcastManager. Но NETWORK_STATE_CHANGED_ACTION будет транслироваться системой, поэтому вам необходимо зарегистрировать динамический BroadcastReceiver для прослушивания NETWORK_STATE_CHANGED_ACTION.
Например..
Определите BroadcastReceiver в своей деятельности как
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
Log.i("Wi-Fi network state", info.getDetailedState().toString());
}
};
и зарегистрируйте и отмените регистрацию как
@Override
protected void onCreate(Bundle savedInstanceState) {
......
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(receiver, intentFilter);
}
@Override
protected void onDestroy() {
unregisterReceiver(receiver);
super.onDestroy();
}