启动没有主Activity的Android应用程序,并在启动应用程序时启动Service

Meh*_*her 81 android android-service android-activity

我的应用程序中有以下场景.我的应用程序中没有UI; 相反,有一个服务在启动时启动并将继续运行.

如何在没有主Activity的情况下配置清单文件?我是否可以在没有任何活动的情 在启动我的应用程序时,我的服务应该启动.这可能吗?

我不想制作半透明的Activity来启动服务.

Dar*_*tle 117

你说你不想使用半透明的Activity,但这似乎是最好的方法:

  1. 在您的清单中,将活动主题设置为Theme.Translucent.NoTitleBar.
  2. 不要打扰您的活动布局,也不要打电话setContentView().
  3. 在您的活动中onCreate(),启动您的服务startService().
  4. finish()启动服务后退出活动.

换句话说,您的活动不一定是可见的; 它可以简单地确保您的服务正在运行然后退出,这听起来像你想要的.

我强烈建议至少显示一个Toast通知,指示您正在启动该服务,或者它已在运行.使用启动器图标时,用户体验非常糟糕,按下它时似乎无效.

  • 启动我的应用程序后,它给了我黑屏。事实并非如此... (2认同)

Lal*_*ani 31

是的,你可以通过创建一个在你的应用程序启动时BroadcastReceiver调用你的方法来实现Service.这是我给出的完整答案.
Android - 启动时启动服务

如果您不想为您的任何图标/启动器应用程序,您也可以这样做,只是不要创建任何活动

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

只需声明你的Service声明正常.

  • 除了SyncAdapter之外,我没有在AndroidMenifest.xml中没有MAIN,LAUNCHER的情况下启动我的应用程序.你的答案真的如此吗? (3认同)
  • 这听起来好像是在启动时启动`Service`但是想要知道如何没有主`Activity`,但只是确保在按下启动器图标时'Service`正在运行. (2认同)
  • 但听起来他们想要一个启动器图标,当按下该图标时,确保服务正在运行.你的建议只是摆脱了启动器图标. (2认同)
  • 我已经删除了带有操作和类别标签的意图过滤器。现在应用程序不再在 android studio 中运行 (2认同)

小智 5

Android Studio版本2.3

您可以按照一些简单的步骤创建没有主要活动的服务。您将可以通过Android Studio安装此应用,并像普通应用一样对其进行调试。

首先,在没有活动的情况下在Android Studio中创建一个项目。然后创建您的Service类,并将服务添加到您的AndroidManifest.xml中

<application android:allowBackup="true"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <service android:name="com.whatever.myservice.MyService">
        <intent-filter>
            <action android:name="com.whatever.myservice.MyService" />
        </intent-filter>
    </service>
</application>
Run Code Online (Sandbox Code Playgroud)

现在,在“运行”按钮(绿色箭头)旁边的下拉菜单中,转到“编辑配置”,然后在“启动选项”中选择“无”。这样一来,您就可以安装服务,而不会让Android Studio抱怨没有主活动。

安装后,该服务将无法运行,但是您可以使用此adb shell命令启动该服务...

am startservice -n com.whatever.myservice/.MyService
Run Code Online (Sandbox Code Playgroud)

可以检查它是否正在运行...

ps | grep whatever
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过,但是您可能也可以让Android Studio自动启动该服务。这可以在“编辑配置”菜单中完成。


Mah*_*alv 5

制作没有活动或服务的应用的原因可能是制作了无需启动的Widget应用。
启动项目后,请勿创建任何活动。创建项目后,只需运行即可。Android studio会说No default activity found

单击编辑配置,然后在启动选项部分中将启动值设置为Nothing。然后单击确定并运行该应用程序。“应用程序”菜单中不会显示任何应用程序

  • 谢谢,这正是我的情况。如果您没有像我一样看到“编辑配置”,请从主菜单中选择“**运行”&gt;“运行...**”,然后选择“**编辑配置...**”。 (2认同)