安装后重新启动
最有可能的是答案是不是,你不能从你的应用程序做这样的事情。这是持有手机的用户的唯一特权(也可能是核心系统服务)。
但是,您可以确保在用户启动主要活动时启动服务,这将在用户安装应用程序后立即执行。
有关更多信息,请参阅How to start android service on installation问题,这实际上是您应该尝试做的。
好的,安装后可能会留下一条消息,向用户显示他必须重新启动? – user902131
你为什么要用户重启手机?你不只是想确保你的服务开始了吗?如果是这样,只需留给用户,以便在需要时启动应用程序(并因此提供服务)。 –
在用户首次从主屏幕启动它之前,无法以任何方式让应用程序在安装完成后立即执行任何操作。没有可以明确监听的广播动作。但是,你可以听的东西一般被调用了很多,如:
-
android.intent.action.USER_PRESENT
, -
android.intent.action.SCREEN_OFF
,或 android.intent.action.SCREEN_ON
在任何情况下你不应该重新启动设备。你的用户会追捕你并用石头杀死你。一边开玩笑,谷歌可能真的从市场上拉你的应用程序。只要监听上述操作之一,检查应用程序是否刚刚安装(例如,使用一次布尔首选项)并启动该服务。
注意:如果您确实最终收听上述操作之一,请在第一次收到意图时停用接收器。你可以这样做,像这样(在你的接收器):
public class FirstTimeReceiver extends BroadcastReceiver {
public void onReceive (Context context, Intent intent) {
// start your service (which does stuff asynchronously, of course, and then:
final ComponentName mySelf = new ComponentName(context, FirstTimeReceiver.class);
context.getPackageManager().setComponentEnabledSetting(mySelf, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}
}
但是,你应该只当不知何故该服务是针对用户(很少有合适的场景本)是绝对关键的做到这一点,而不是为你/你的应用程序。作为bjarkef提到,你应该只在用户从主屏幕启动你的应用程序后启动它(更好的是,请求用户许可来运行该服务)。
thx 4你的帮助。我会尝试这种方式,而无需重新启动:-)你是对的,它对用户更好 – user902131
是否TIME_TICK广播意图可以是一个很好的方式来启动服务尽快? –
请记住在像这样的意图启动服务后立即取消注册接收器,以免不必要地减慢用户电话的速度。 –
这听起来是一种不好的方式来处理这个问题,我相信你可以确保服务被加载而不需要重新启动设备 – Pierre
可能与http://*.com/questions/2127044/how-to重复-start-android-service-on-installation –
@Emmanuel:我不会说重复的,问题是另一个问题,但正确的方法是去做另一个问题。 –