安装后重新启动

问题描述:

我的apk安装后是否可以强制重启设备?安装后重新启动

我想强制这个,因为我想确保我的服务已启动。

+4

这听起来是一种不好的方式来处理这个问题,我相信你可以确保服务被加载而不需要重新启动设备 – Pierre

+0

可能与http://*.com/questions/2127044/how-to重复-start-android-service-on-installation –

+0

@Emmanuel:我不会说重复的,问题是另一个问题,但正确的方法是去做另一个问题。 –

最有可能的是答案是不是,你不能从你的应用程序做这样的事情。这是持有手机的用户的唯一特权(也可能是核心系统服务)。

但是,您可以确保在用户启动主要活动时启动服务,这将在用户安装应用程序后立即执行。

有关更多信息,请参阅How to start android service on installation问题,这实际上是您应该尝试做的。

+0

好的,安装后可能会留下一条消息,向用户显示他必须重新启动? – user902131

+1

你为什么要用户重启手机?你不只是想确保你的服务开始了吗?如果是这样,只需留给用户,以便在需要时启动应用程序(并因此提供服务)。 –

在用户首次从主屏幕启动它之前,无法以任何方式让应用程序在安装完成后立即执行任何操作。没有可以明确监听的广播动作。但是,你可以听的东西一般被调用了很多,如:

  • 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提到,你应该只在用户从主屏幕启动你的应用程序后启动它(更好的是,请求用户许可来运行该服务)。

+0

thx 4你的帮助。我会尝试这种方式,而无需重新启动:-)你是对的,它对用户更好 – user902131

+0

是否TIME_TICK广播意图可以是一个很好的方式来启动服务尽快? –

+1

请记住在像这样的意图启动服务后立即取消注册接收器,以免不必要地减慢用户电话的速度。 –