WifiManager.NETWORK_STATE_CHANGED_ACTION не получено - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу знать, когда устройство подключено к сети 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 некоторые другие разрешения?

1 Ответ

0 голосов
/ 19 декабря 2018

Здесь 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();
    }
...