2011-08-24 228 views
0

我的apk安裝後是否可以強制重啓設備?安裝後重新啓動

我想強制這個,因爲我想確保我的服務已啓動。

+4

這聽起來是一種不好的方式來處理這個問題,我相信你可以確保服務被加載而不需要重新啓動設備 – Pierre

+0

可能與http://stackoverflow.com/questions/2127044/how-to重複-start-android-service-on-installation –

+0

@Emmanuel:我不會說重複的,問題是另一個問題,但正確的方法是去做另一個問題。 –

回答

2

最有可能的是答案是不是,你不能從你的應用程序做這樣的事情。這是持有手機的用戶的唯一特權(也可能是核心系統服務)。

但是,您可以確保在用戶啓動主要活動時啓動服務,這將在用戶安裝應用程序後立即執行。

有關更多信息,請參閱How to start android service on installation問題,這實際上是您應該嘗試做的。

+0

好的,安裝後可能會留下一條消息,向用戶顯示他必須重新啓動? – user902131

+1

你爲什麼要用戶重啓手機?你不只是想確保你的服務開始了嗎?如果是這樣,只需留給用戶,以便在需要時啓動應用程序(並因此提供服務)。 –

0

在用戶首次從主屏幕啓動它之前,無法以任何方式讓應用程序在安裝完成後立即執行任何操作。沒有可以明確監聽的廣播動作。但是,你可以聽的東西一般被調用了很多,如:

  • 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

請記住在像這樣的意圖啓動服務後立即取消註冊接收器,以免不必要地減慢用戶電話的速度。 –

相關問題