无活动启动android应用程序

Mar*_*aux 24 android startup android-manifest

我的应用程序旨在仅作为服务运行(没有接口,只在后台运行).我的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>
Run Code Online (Sandbox Code Playgroud)

问题是,当我正在开发(使用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
Run Code Online (Sandbox Code Playgroud)

如何在运行时启动应用程序,而不必每次都重新启动它?


Android 3.1或更高版本不再可以编辑此功能.资源

小智 33

除了EboMike提到的两个选项之外:您始终可以BOOT_COMPLETED通过命令行发送广播,而不是重新启动手机.

使用

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
Run Code Online (Sandbox Code Playgroud)

这将导致像实际重启后的情况,并且还将触发任何第三方应用程序启动接收器.在终端中输入一次后,您通常可以通过按向上箭头键然后在大多数操作系统上返回来重复它.或者,您可以将其包含在重新安装应用程序后触发的脚本中.


如果您只想将广播限制到您的应用,您还可以指定一个组件:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName
Run Code Online (Sandbox Code Playgroud)

这会将重新启动广播仅发送给您的接收方.不会调用所有其他应用程序.