如何在安装时启动Android服务

44

我有一个设备管理应用程序,基本上是从启动时作为后台服务运行的。我想在安装后立即启动此应用程序。如何实现这一点?

2个回答

54

您无法这样做——没有办法仅仅因为应用程序被安装就自动启动服务。

第一次必须通过某种活动由用户调用该应用程序。或者,您需要通过清单文件挂钩到一些相关广播Intent,这样当其中一个事件发生时,您就可以控制并启动您的服务。或者,您需要请求用户重新启动,以便您的BOOT_COMPLETED Intent过滤器可以获得控制权。


5
是的,这是故意的。当应用程序下载时,应用程序安装会自动在后台进行。我们希望在用户第一次打开应用程序之前,没有任何应用程序代码运行。(请不要告诉用户重新启动设备。没有必要这样做。只需让他们运行您的应用程序,并在第一次运行时进行初始化。) - hackbod
12
好的,所以这并不是为了安全性,因为我可以在启动时、接收短信时或下一个包安装时运行代码。我会把它归类为对预期平台行为的“推动”。 但对我的客户来说,它看起来像一个 bug - 在 Android 上需要跨越额外的障碍才能让服务运行。这不是一个用户会从市场上选择的应用程序,更可能是运营商或企业想要在手机上安装的应用程序,最好根本没有任何终端用户交互。 - Rob Charlton
1
如果运营商正在将其安装在手机上,则在交付给用户之前,手机将被重新启动,因为运营商不会让他们的手机库存保持运行状态--它们将在定制后并交付给客户之前关闭。关于企业方面,Android目前的形式是为消费者设计的,因此平台中会有各种与企业所需相反的东西,以保护消费者免受恶意软件的侵害。 - CommonsWare
Lookout Plan B可以做到(可能需要一些黑客技巧)https://market.android.com/details?id=com.lookout.labs.planb&hl=en - amit
2
@CommonsWare:Plan B 正在利用的技术是什么? - Phillip
显示剩余3条评论

11

曾经存在一个漏洞- Android Analytics SDK在安装后立即发送意图,但现在已关闭(当然会产生很多混乱)。

但我相信最终答案就在这里:

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

这似乎表明,在Android 3.1中,谷歌做出了决定,即应用程序处于停止状态,直到用户明确激活它们,例如通过启动应用程序或放置小部件。

这意味着监听常见广播的策略(即暗中启动您的应用程序)也不起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接