我确定这是一个非常常见的问题,但没有看到有关如何完成以下任何问题。
我创建了一个每5分钟运行一次的服务,并在设备完成BOOT_COMPLETE后调用,这样就可以了。
我遇到的问题是当我在设备上进行调试时,我必须重新启动手机才能启动服务。有没有办法让我启动这个在Application Startup上每5分钟运行一次的后台服务。
所以我需要的是检查服务是否正在运行,如果它没有启动它。
为了进一步详细说明,这项服务可以获取网络数据,因此BOOT_COMPLETE启动它的理想情况非常有效。但是在用户下载应用程序并启动它的情况下,此服务将不会被启动,因此我需要一种手动启动方式。如果服务没有运行,如果用户刚安装它就不会运行,我需要启动它。
答案 0 :(得分:2)
我实际上是通过使用以下链接中使用的方法解决了我的问题。
How to send and receive broadcast message
从Manifest中删除IntentFilter并手动调用它。希望这有助于其他人。
if(!isMyServiceRunning()) {
Intent intent = new Intent(mContext, OnBootReceiver.class);
sendBroadcast(intent);
}
答案 1 :(得分:1)
您可以使用adb shell
手动启动服务。见How to start and stop android service from a adb shell?
命令是:
am startservice com.your.package/.ServiceClassName
根据Android版本的不同,有效语法可能略有变化,例如:
am startservice -n com.your.package/.ServiceClassName
am startservice -a com.your.package/.ServiceClassName
am startservice --user 0 -n com.your.package/.ServiceClassName
答案 2 :(得分:1)
听起来你想要做一个由BOOT_COMPLETE事件
启动的粘性服务http://developer.android.com/reference/android/app/Service.html#START_STICKY
对于开发,您可以向服务添加另一个intent过滤器以启动它,以便您可以在每次更新代码后从命令行通过活动管理器手动触发它,而无需重新启动设备。