Как определить, что состояние сети / Wi-Fi изменилось, когда мое приложение работает в фоновом режиме? - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь выяснить, как обнаружить изменение состояния Wi-Fi, когда мое приложение находится в фоновом режиме. Чтобы дать краткое изложение моей проблемы. В своей деятельности я регистрирую приемник OnStart () такой, что:

IntentFilter networkIntent = new IntentFilter();
        networkIntent.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkIntent.addAction("android.net.wifi.WIFI_STATE_CHANGED");
        registerReceiver(wifichangereceiver, networkIntent);

и затем я определяю свой wifichangereceiver fn:

 public final BroadcastReceiver wifichangereceiver = new BroadcastReceiver() {


        @Override
        public void onReceive(final Context context, final Intent intent) {
            final ConnectivityManager connMgr = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);

            final android.net.NetworkInfo wifi = connMgr
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

            if (wifi.isConnected()) {
                isConnectedtoWifi = true;


                if (MyCallisInConnectedState()) {
                    onNetworkStateChanged(true);
                }

            } else {
                isConnectedtoWifi = false;

            }
        }
    };

и я отменяю регистрацию в Onstop ():

unregisterReceiver(wifichangereceiver);

Однако этот механизм работает ТОЛЬКО в том случае, когда приложение находится на переднем плане, поскольку я сам регистрируюсь и отменяю регистрацию в своей деятельности. Есть ли более простой способ контролировать состояние Wi-Fi, когда вызов находится в фоновом режиме (или, возможно, хотя?) Я попытался добавить получателя в манифесте, но не уверен, что это правильный подход. Я хочу быть в состоянии сказать, когда мое состояние Wi-Fi меняется. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Если ваше приложение предназначено для уровня API 26 или выше, вы должны использовать службу переднего плана для выполнения любой длительной задачи, даже когда пользователь не взаимодействует с приложением.Начиная с Android Oreo, система накладывает ограничения на запуск фоновых служб, когда само приложение не находится на переднем плане.Для выполнения коротких жизненных заданий в фоновом режиме ваше приложение должно использовать запланированное задание .

. Вы можете сослаться на этот учебный документ, чтобы понять, как оно работает в соответствии с вашими требованиями.,

0 голосов
/ 12 сентября 2018

Вы можете использовать JobScheduler и JobService для изменений соединения.

получить этот ответ

https://stackoverflow.com/a/48658403/4564200

https://stackoverflow.com/a/37289411/4564200

...