97

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

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

我不想做一个半透明的活动来启动服务。

4

4 回答 4

131

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

  1. 在您的清单中,将活动主题设置为Theme.Translucent.NoTitleBar
  2. 不要为你的 Activity 布局而烦恼,也不要调用setContentView().
  3. 在您的 Activity 中onCreate(),使用 启动您的服务startService()
  4. finish()启动服务后退出活动。

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

我强烈建议至少向用户显示一个Toast 通知,表明您正在启动服务,或者它已经在运行。启动器图标在您按下它时似乎没有任何作用,这是非常糟糕的用户体验。

于 2012-06-06T07:14:29.510 回答
35

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

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

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

只需声明您Service的正常声明即可。

于 2012-06-06T07:15:53.710 回答
19

制作一个没有活动或服务的应用程序的原因可能是制作一个不需要启动的主屏幕小部件应用程序。
一旦你开始一个项目,不要创建任何活动。创建项目后,只需点击运行。Android工作室会说No default activity found

单击Edit Configuration(从Run菜单中)并在Launch 选项部分中将Launch值设置为Nothing。然后单击确定并运行应用程序。

注意:由于应用程序没有启动器活动,因此应用程序菜单中不会显示任何图标。相反,在设备的应用程序管理器中查找它。

于 2018-06-28T11:09:36.420 回答
7

安卓工作室 2.3 版

您可以通过几个简单的步骤来创建没有主活动的服务。您将能够通过 Android Studio 安装此应用并像普通应用一样对其进行调试。

首先,在 Android Studio 中创建一个没有活动的项目。然后创建您的服务类并将服务添加到您的 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>

现在,在“运行”按钮(绿色箭头)旁边的下拉菜单中,转到“编辑配置”并在“启动选项”中选择“无”。这将允许您安装您的服务,而 Android Studio 不会抱怨没有主 Activity。

安装后,该服务将不会运行,但您将能够使用此 adb shell 命令启动它...

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

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

ps | grep whatever

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

于 2017-10-19T23:57:59.357 回答