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

时间:2012-06-06 07:11:23

标签: android android-activity android-service

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

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

我不想制作半透明的活动来启动服务。

4 个答案:

答案 0 :(得分:114)

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

  1. 在您的清单中,将活动主题设置为Theme.Translucent.NoTitleBar
  2. 不要为您的活动布局而烦恼,也不要致电setContentView()
  3. 在您的活动onCreate()中,使用startService()启动您的服务。
  4. 启动服务后,使用finish()退出活动。
  5. 换句话说,您的活动不一定是可见的;它可以简单地确保您的服务正在运行然后退出,这听起来像你想要的。

    我强烈建议至少显示一个Toast notification,向用户表明您正在启动该服务,或者它已在运行。使用启动器图标时,用户体验非常糟糕,按下它时似乎什么都不做。

答案 1 :(得分:29)

是的,您可以通过创建在应用程序启动时调用BroadcastReceiver的{​​{1}}来实现此目的。以下是我给出的完整答案 Android - Start service on boot

如果你不想为你申请任何图标/启动器,你也可以这样做,只是不要创建任何活动

Service

只需宣布您的<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 正常宣布。

答案 2 :(得分:4)

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>

现在,在&#34; Run&#34;旁边的下拉菜单中按钮(绿色箭头),转到&#34;编辑配置&#34;并在&#34;发布选项&#34;选择&#34;没什么&#34;。这将允许您在没有Android Studio抱怨没有主要活动的情况下安装您的服务。

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

am startservice -n com.whatever.myservice/.MyService

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

ps | grep whatever

我还没有尝试过,但您也可以让Android Studio自动启动该服务。这将在&#34;编辑配置&#34;菜单。

答案 3 :(得分:3)

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

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