我需要在安装应用程序时执行操作。我已经研究过使用
了Intent.PACKAGE_ADDED
但是我没有收到正在安装的应用程序中的意图。我想在第一次安装我的应用程序时运行代码。
用例是在线服务注册。我可以列出BOOT_COMPLETED,如果已经安装了应用程序就可以了,但我需要在用户首次安装应用程序时处理这个案例。
这篇文章, Can you run an intent or script when your app gets installed on Android?
建议收听TIMER_TICK并在第一次广播时执行注册并设置一个标志,以便在下一个TIMER_TICK时不执行该操作。这似乎有问题,因为无论你是否在接收器中做某事,你仍然每隔一分钟就开始使用你的接收器并在此过程中耗尽电池。
有更好的解决方案吗?
答案 0 :(得分:5)
没有可靠的事件可以捕获。即使TIMER_TICK
只能在Android 3.1下运行。从3.1开始。在您的应用处于活动状态之前,您无法接收系统广播(这意味着用户必须至少手动启动一次)。
来自3.1. release notes 的启动已停止应用程序的控件
从Android 3.1开始,系统的包管理器会跟踪 处于停止状态的应用程序并提供了一种方法 从后台进程和其他进程控制它们的启动 应用
[...]
请注意,系统会向所有人添加FLAG_EXCLUDE_STOPPED_PACKAGES 广播意图。这样做是为了防止来自后台的广播 来自无意或不必要的组件的服务 停止应用程序。 [..]
应用程序在首次安装时处于停止状态但是 尚未启动以及用户手动停止时 (在管理应用程序中)。
我建议您在首次启动应用时进行初始工作。
答案 1 :(得分:1)
对于新的市场,INSTALL_REFERRER意图现在在Android 3.1及更高版本的启动时触发。所以我们可以在我们的应用中收到它。但是,当应用程序处于停止状态时,它仍会在2.2的安装时触发。因此,如果是Froyo,我无法收到它。
答案 2 :(得分:0)
如果您愿意假设已安装Google Android Market应用,则可以使用INSTALL_REFERRER。有关详细信息,请参阅Get referrer after installing app from Android Market。