Android:广播接收器和后台服务

时间:2017-03-18 12:19:27

标签: android

我想实现一个后台服务和一个广播接收器来检查我的设备上是否有互联网,即使应用程序关闭也会发出http请求,这一切都来自我的活动。为此,我查看了本网站上的主题,但我不了解一些内容。 我不明白如何做到这一点,我的广播接收器中的OnReceive()函数是否在每次连接变化时调用?或者只是当我在我的活动中注册接收器时?有人可以告诉我更多关于我需要做什么来实现我想要的东西吗?我已经创建了我的广播接收器,但我对其他部分感到很失落。感谢

1 个答案:

答案 0 :(得分:0)

首先在应用程序范围内创建一个后台服务,您可以使用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/ 希望它有所帮助。