【问题标题】:Launch Android application without main Activity and start Service on launching application在没有主 Activity 的情况下启动 Android 应用程序并在启动应用程序时启动服务
【发布时间】:2012-06-10 04:49:51
【问题描述】:

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

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

我不想做一个半透明的Activity来启动Service。

【问题讨论】:

标签: android android-activity android-service


【解决方案1】:

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

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

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

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

【讨论】:

  • 它在启动我的应用程序后给了我空白屏幕。事实并非如此......
  • @meher 我刚刚对其进行了测试,它对我来说非常有效——我的服务启动了,我没有看到任何活动,即使是一瞬间。请将您的 Activity 的 onCreate() 的内容发布出来,我们应该能够找出问题所在。
  • 当我第一次安装我的应用程序时,我可以看到活动启动并在一秒钟内消失。
  • public class TestActivity extends Activity { /** 首次创建活动时调用。 */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("活动", "启动服务"); startService(new Intent(TestActivity.this,MyService.class));结束(); } }
  • 我意识到这是一个老问题,但它似乎不再起作用。将主活动主题更改为 Theme.Translucent.NoTitleBar 或 Theme.Translucent.NoTitleBar.FullScreen 会导致原本可以正常工作的应用程序将活动屏幕短暂显示为始终导致“应用程序停止响应”消息的应用程序。
【解决方案2】:

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

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

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

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

【讨论】:

  • 听起来提问者可以在启动时启动Service,但想知道如何没有主Activity,但只需确保Service在启动器时运行图标被按下。
  • 但听起来他们想要一个启动器图标,按下该图标可确保服务正在运行。您的建议只是去掉了启动器图标。
  • @LalitPoptani 解决方案很好。但我的服务在我启动手机之前不会启动。
  • 我无法在没有 AndroidMenifest.xml 中的 MAIN、LAUNCHER 的情况下启动我的应用程序,SyncAdapter 除外。你的回答是真的吗?
  • 我已经删除了带有动作和类别标签的意图过滤器。现在 App 不再在 android studio 中运行
【解决方案3】:

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

点击Edit Configuration(从Run菜单)并在Launch option部分将Launch值设置为没什么。 然后单击确定并运行应用程序。

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

【讨论】:

  • 谢谢,这正是我的情况。如果您没有像我一样看到 Edit Configuration,请从主菜单中选择 Run > Run...,然后选择 Edit Configurations...
  • 另外,应用程序类没有启动
【解决方案4】:

Android Studio 2.3 版

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

首先,在 Android Studio 中创建一个没有 Activity 的项目。然后创建您的服务类并将服务添加到您的 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 自动启动该服务。这将在“编辑配置”菜单中完成。

【讨论】:

  • 我从 adb shell 收到以下错误:启动服务:Intent { cmp=com.example.wolk.myapp/.MyIntentService } 错误:未找到;没有服务启动。 LOGCAT 显示:ActivityManager: 不允许启动 ServiceInfo{274d8af com.example.wolk.myapp.MyIntentService
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多