Есть ли способы определить точное время, когда пользователь отключает WIFI или данные?

  1. Я искал, и оказалось, что Broadcast Receiver не рекомендуется для цели более N.

  2. Я узнал GCMNetworkManager. И это тоже обесценивается.

  3. Я также проверил JobScheduler. Однако его поведение — это не то, что я хочу реализовать.

Единственный способ, который я могу реализовать из трех, - это периодически проверять статус Интернета.

Однако я этого не хочу. Я хочу обнаружить событие, когда пользователь отключает или включает их. И затем я хотел бы показать диалоговое окно, чтобы пользователь снова включил его.

Мой колледж, который делает iOS, говорит, что он использует Observer для своего приложения для iOS. И сказал, что, возможно, Android такой же.

Есть ли способ сделать это возможным?


comment
Начиная с Nougat (7.x) есть JobScheduler и JobService: -is-killed-in-backgrou" title="обнаружение изменения подключения в Android 7 и выше, когда приложение убито в backgrou"> stackoverflow.com/questions/48527171/ Честно говоря, я никогда не слышал, чтобы разработчик не хочу реализовать класс... это забавно   -  person emandt    schedule 21.06.2019
comment
@emandt, что ты имеешь в виду? Я просто не хочу периодически проверять статус. Но обнаружение события, когда пользователь выключает или включает его. Эти две вещи разные.   -  person c-an    schedule 21.06.2019
comment
На самом деле JobScheduler делает именно то, что вам нужно: внутри он проверяет зарегистрированные события, а затем вызывает ВАШЕ событие, когда возникает ВАШЕ конкретное состояние. Это освободит разработчика от выполнения циклов, таймеров, опросов и т. д.   -  person emandt    schedule 21.06.2019
comment
Мм понятно. Итак, вы имеете в виду, что он не запускается «периодически», а обнаруживает конкретное событие «мгновенно». Как?   -  person c-an    schedule 22.06.2019
comment
Почему бы не прочитать официальное руководство? developer.android.com/reference/android/app/job/JobScheduler Вы обнаружите это: Когда заявленные критерии будут выполнены, система выполнит это задание в JobService вашего приложения. И быстрый поиск в Google показывает эту ссылку: stackoverflow.com/questions/37217283/ (все это заняло 1 минуту вместо полных выходных задержки/ожидания)   -  person emandt    schedule 24.06.2019


Ответы (1)


Вы могли бы рассмотреть те, что в манифесте.

        <receiver android:name="receiver.NetworkChangeReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            </intent-filter>
        </receiver>

Однако они устарели.

Вместо этого вы можете объявить его программно.

  1. Создайте класс получателя.
class NetworkChangeReceiver : BroadcastReceiver() {
    var dialog: Dialog? = null

    override fun onReceive(context: Context, intent: Intent) {
        val isConnected = NetworkUtil.getConnectivityStatusString(context)

        Toast.makeText(context, "Intere State Changed: $isConnected", Toast.LENGTH_SHORT).show()
    }
}
  1. В вашем Activity.
// Internet Check Receiver
val intentFilter = IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
this.registerReceiver(NetworkChangeReceiver(), intentFilter)
person c-an    schedule 25.06.2019