应用程序被杀死时的Android地理围栏
我的主要要求是让一个服务拥有自己的流程并触发自己的地理围栏事件。我希望当用户进入地理围栏时,通知中心会通知他,即使应用程序被杀死 我读过关于服务的书,这对我来说似乎很清楚,Android文档非常密集,因此我设法了解了如何使用自己的流程启动服务,以及如何使用Messenger与应用程序进行通信 然后是来自Google的代码示例,展示了如何将地理围栏与Google play服务结合使用: 到目前为止,我发现我们必须使用IntentService来触发地理围栏事件,从我阅读的文档中可以看出,IntentService在其工作完成时会自动终止。我还做了一点测试,当应用程序被终止时,Intentservice看起来会被终止,这在文档方面并不让我感到惊讶 所以我的问题是,我们如何执行有自己流程的地理围栏服务?这是否可以避免使用IntentService处理此问题 编辑: 我想这样做的原因是,用户可以设置geofence“提醒”,这是基于日常使用情况。例如,想象一下,每天你到达工作场所时,当我们进入这个地理围栏时,我们应该能够发出警报(或通知),告知应用程序是否正在运行。我们不希望用户担心应用程序在后台运行应用程序被杀死时的Android地理围栏,android,service,android-service,geofencing,android-geofence,Android,Service,Android Service,Geofencing,Android Geofence,我的主要要求是让一个服务拥有自己的流程并触发自己的地理围栏事件。我希望当用户进入地理围栏时,通知中心会通知他,即使应用程序被杀死 我读过关于服务的书,这对我来说似乎很清楚,Android文档非常密集,因此我设法了解了如何使用自己的流程启动服务,以及如何使用Messenger与应用程序进行通信 然后是来自Google的代码示例,展示了如何将地理围栏与Google play服务结合使用: 到目前为止,我发现我们必须使用IntentService来触发地理围栏事件,从我阅读的文档中可以看出,Inte
关于Intentservice,您是对的,它在完成任务时会被杀死。 但有一种解决方法可以让你的服务在你的应用程序被关闭后仍能正常工作 请从您提到位置代码的活动中删除以下代码 从您的活动中删除提到的代码 检查您的onPause() 在onStop()中检查代码
在您的Intentservice中添加一些日志,您将看到,当您在上述修改后运行应用程序时,您甚至可以在应用程序被终止后获得位置更新。:-) 我实际上是通过创建一个具有自己流程的服务来实现这一点的。此服务与IPC通信绑定,我的活动将在需要时注册到此服务
在这项服务中,我确实应用了我在谷歌示例中找到的地理围栏示例。它使用IntentService触发地理围栏事件。我没有在我的活动中使用这个逻辑,而是在我自己的服务中使用它。现在,即使我的应用程序被终止,我也可以收到通知。为什么用户希望您将其RAM和CPU浪费在额外的进程上?Play Services GeoFenging是专门为避免应用程序必须保留进程而设计的,但仍然可以获得GeoFenging事件。@Commonware并非所有设备都有Play Services。这些都需要原始设备制造商的钱才能从谷歌获得许可。我不会写一个没有回退就使用它们的应用程序。在低成本的亚洲,不安装它们是很常见的。在cusotm ROM上安装也是不合法的,因为您没有许可证,尽管通常是这样pirated@GabeSechan:“并非所有设备都有播放服务”--是的,但OP正在使用播放服务,正如问题的第三段所指出的,链接到游戏服务地理围栏示例进一步说明了这一点。当然,也许我没有说全部,我编辑了我的问题。我从来没有听说过Wakefull接收器,我来看看!嘿,你可以发布服务的代码,即使在应用程序被关闭的情况下,该服务也会继续运行吗?你确定必须这样做吗?它应该按原样工作,一旦它是一个意图服务,它应该被触发,即使应用程序在后台运行或被杀死。请分享您的服务代码,如果它在这方面的工作case@Tibo
@Override
protected void onPause() {
super.onPause();
//Comment out below code
LocationServices.FusedLocationApi.removeLocationUpdates(
mGoogleApiClient, this);
}
@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();
}
}