2011-12-13 70 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

相关问题