我的应用程序旨在仅作为服务运行(没有界面,只在后台运行)。我的AndroidManifest.xml中没有提到任何活动,但是在电话启动时放置了一个接收器来启动应用程序。
<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
答案 0 :(得分: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
这仅将重启广播发送给您的接收方。所有其他应用程序都没有被调用。
答案 1 :(得分:2)
选项1:添加将启动服务的虚拟活动。在发货前将其取下。
选项2:创建第二个启动服务的测试应用程序。
答案 2 :(得分:1)
通过任何意图使用广播接收器启动服务,如
android.intent.action.BOOT_COMPLETED
在Android 3.1之上是不可能的, 因此,要使用您的应用程序,必须有一个非UI活动(可以在oncreate()中调用finish)。