Android: широковещательный приемник и фоновая служба

Я хотел бы реализовать фоновую службу и широковещательный приемник, чтобы проверять, есть ли интернет на моем устройстве, и делать HTTP-запросы, даже когда приложение закрыто, и все это из моей деятельности. Для этого я проверил темы на этом сайте, но я не понимаю некоторые вещи. Я не понимаю, как это сделать, функция OnReceive() в моем широковещательном приемнике вызывается каждый раз при изменении подключения? Или только когда я регистрирую свой приемник в своей деятельности? Может ли кто-нибудь рассказать мне больше о том, что мне нужно сделать, чтобы достичь того, чего я хочу? Я уже создал свой широковещательный приемник, но я немного потерялся в других частях. Спасибо


person Messerschmitt    schedule 18.03.2017    source источник
comment
Возможный дубликат Broadcast Receiver в службе   -  person rkmax    schedule 18.03.2017


Ответы (1)


Во-первых, чтобы создать фоновую службу в рамках приложения, вы можете использовать классы Handler, если бы это было вне области приложения, можно было бы использовать GCMTaskManger или JobScheduler.

делать http-запросы, даже когда приложение закрыто, все это из моей деятельности

Для этого используйте JobScheduler или GCMTaskManager, которые будут вызывать ваши http-запросы, даже когда приложение закрыто.

Может ли кто-нибудь рассказать мне больше о том, что мне нужно сделать, чтобы достичь того, чего я хочу?

Итак, допустим, вы используете GCMTaskManager, вы сначала инициализируете службу.

 mGcmNetworkManager = GcmNetworkManager.getInstance(this);

затем запланируйте выполнение своих задач в течение определенного интервала

 PeriodicTask task = new PeriodicTask.Builder()
            .setService(MyTaskService.class)
            .setTag(TASK_TAG_WIFI)
            .setPeriod(30L)
            .build();

    mGcmNetworkManager.schedule(task);

а потом слушать события

 mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(MyTaskService.ACTION_DONE)) {
                String tag = intent.getStringExtra(MyTaskService.EXTRA_TAG);
                int result = intent.getIntExtra(MyTaskService.EXTRA_RESULT, -1);

                String msg = String.format("DONE: %s (%d)", tag, result);
                Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
            }
        }
    };

функция OnReceive() в моем широковещательном приемнике вызывается каждый раз при изменении подключения

Это зависит от службы, генерирует ли она события для слушателя, если да, то вызывается onReceive.

Я предлагаю вам прочитать эту статью для планировщиков https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/ Надеюсь, это поможет.

person OutOfBounds 94    schedule 18.03.2017