应用程序被杀时Android地理围栏

时间:2015-02-05 22:32:40

标签: android service android-service geofencing android-geofence

我的主要要求是让服务拥有自己的流程并触发自己的地理围栏事件。我希望用户在进入地理围栏时收到通知中心的通知,即使应用程序被杀死了。

我阅读了有关服务的内容,这对我来说非常清楚,Android文档非常密集,因此我设法了解如何使用自己的流程启动服务,以及如何使用Messenger与应用程序进行通信。< / p>

然后有来自Google的代码示例显示了如何在Google Play服务中使用地理围栏: Google samples geofencing

到目前为止,我发现我们必须使用IntentService来触发地理围栏事件,并且从我所阅读的文档中可以看出,IntentService在其工作完成后会自行终止。我也测试了一下,看起来当应用程序被杀时,Intentservice会被杀死,这对我的文档并不感到惊讶。

所以我的问题是,我们如何才能执行具有自己流程的地理围栏服务?是否可以避免在此问题上使用IntentService?

修改

我想这样做的原因是,用户可以设置地理围栏&#34;提醒&#34;它基于日常使用。例如,想象一下,当您到达工作场所时,我们应该能够在我们输入关于应用程序运行与否的地理围栏时发出警报(或通知)。我们不希望用户担心应用程序在后台运行。

3 个答案:

答案 0 :(得分:0)

  1. 您不必为此目的使用单独的过程(除非您有其他功能,您没有在这里大声说出来)
  2. 使用WakefulBroadcastReceiver,这确实非常适合处理地理围栏过渡事件。

答案 1 :(得分:0)

我实际上是通过使用自己的流程创建服务来实现这一点的。这项服务与IPC通信绑定,然后我的活动在需要时注册它。

在此服务中,我确实应用了我在Google示例中找到的地理围栏示例。它使用IntentService来触发地理围栏事件。我没有在我的活动中使用这个逻辑,而是在我自己的服务中使用它。现在,即使我的应用程序被杀,我也可以收到通知。

答案 2 :(得分:-1)

你对Intentservice是正确的,它在完成任务时会被杀死。 但有一种解决办法可以让你的服务工作,即使你的应用程序被杀死。

请从您提及位置代码的活动中删除以下代码。

从您的活动中删除提及的代码

检查你的onPause()

@Override
protected void onPause() {
    super.onPause();

    //Comment out below code 
    LocationServices.FusedLocationApi.removeLocationUpdates(
            mGoogleApiClient, this);
}

检查onStop()

中的代码
 @Override
protected void onStop() {
    super.onStop();
    //Comment out the below code if you have done in your activity to disconnect from google api client.

    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

在你的Intentservice中加入一些日志,你会发现在你提到修改后运行你的应用程序时甚至可以在应用程序被杀之后获得位置更新。 : - )