2011-12-13 73 views
24

我有一個應用程序,其目的只是作爲服務運行(沒有界面,只是在後臺運行)。我的AndroidManifest.xml中沒有提到任何活動,但是在電話啓動時放置了一個接收器來啓動應用程序。開始android應用程序沒有活動

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <service 
     android:enabled="true" 
     android:name=".MyAppService"> 
     <intent-filter> 
      <action 
       android:name = "me.myapp.MyAppService"> 
      </action> 
     </intent-filter> 
    </service> 
    <receiver 
     android:enabled="true" 
     android:name=".BootReceiver"> 
     <intent-filter> 
      <action android:name = "android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 
</application> 

問題是,當我開發(使用Eclipse)應用程序時,我需要經常測試我的更改。當我運行應用程序(用我的手機連接在調試模式下),我有一個像

[2011-12-14 00:18:40 - MyApp] Android Launch! 
[2011-12-14 00:18:40 - MyApp] adb is running normally. 
[2011-12-14 00:18:40 - MyApp] No Launcher activity found! 
[2011-12-14 00:18:40 - MyApp] The launch will only sync the application package on the device! 
[2011-12-14 00:18:40 - MyApp] Performing sync 

消息我如何開始在運行該應用程序,而無需每次都重新啓動嗎?


編輯這是不可能的了適用於Android 3.1或以上。 Source

回答

33

除了EboMike提到的兩個選項:您始終可以通過命令行發送BOOT_COMPLETED廣播,而不必重新啓動手機。

使用

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 

這將導致像一個實際的重新啓動後的情況,也將觸發任何第三方應用程序的啓動接收器。在終端中鍵入一次後,您通常可以通過按向上箭頭鍵然後在大多數操作系統上返回來重複該操作。或者您可以將其包含在重新安裝應用程序後觸發的腳本中。


如果你想限制廣播只有您的應用程序,你也可以指定一個組件:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName 

這將重啓只廣播接收機。所有其他應用程序不被調用。

2

選項1:添加一個虛擬活動,以啓動您的服務。運送前將其取出。

選項2:創建第二個啓動您的服務的測試應用程序。

+0

容易和工作,感謝 – 2011-12-14 00:40:32

+0

如何將應用程序的行爲在運行時?什麼會使應用程序運行?開機後運行並不夠好,因爲Android可能會終止進程。什麼會再次啓動它? – 2013-06-16 17:47:39

1

開始使用廣播接收器通過任何意圖服務等

android.intent.action.BOOT_COMPLETED

不可能以上的Android 3.1,直到用戶使用應用程式, 並且因此使用您的應用必須有一個單一的非UI活動(可以在oncreate()中調用finish)。

See the proof here

相關問題