在没有主要活动的情况下启动Android应用程序,并在启动应用程序时启动Service


90

我的应用程序中有以下情形。我的应用程序中没有UI。相反,有一项服务会在启动时启动,并将持续运行。

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

我不想进行半透明的活动来启动服务。


看看到此[问题] [1] [1]:stackoverflow.com/questions/4468006/...
Munish卡普尔

Answers:


125

您说过您不想使用半透明的Activity,但这似乎是实现此目的的最佳方法:

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

换句话说,您的活动不一定是可见的;只需确保您的服务正在运行,然后退出即可,这听起来像您想要的。

我强烈建议至少显示一个Toast通知,以向用户表明您正在启动服务或该服务已在运行。用户启动器图标按下时似乎无能为力,这是非常糟糕的用户体验。


2
启动我的应用程序后,它给了我黑屏。情况并非如此……
Meher

1
@meher我刚刚对其进行了测试,它对我来说非常理想-我的服务启动了,即使一瞬间我也没有看到任何活动。请发布您Activity的onCreate()的内容,我们应该能够找出问题所在。
Darshan Rivka Whittle

当我第一次安装我的应用程序时,我可以看到活动在第二次启动和消失。
Meher 2012年

公共类TestActivity扩展Activity {/ **在首次创建活动时调用。* / @Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); Log.i(“活动”,“启动服务”); startService(new Intent(TestActivity.this,MyService.class)); 完(); }
梅尔(Meher)2012年

1
我意识到这是一个老问题,但是它似乎不再起作用。将主活动主题更改为Theme.Translucent.NoTitleBar或Theme.Translucent.NoTitleBar.FullScreen会导致其他正常运行的应用程序,该应用程序将活动屏幕短暂地显示为一个始终导致“应用程序停止响应”消息。
alzee 2015年

32

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

如果您不希望应用程序有任何图标/启动器,您也可以这样做,只是不要使用

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

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


2
听起来像问问者Service在启动时启动就可以了,但是想知道如何不使用main Activity,而只需确保Service按下启动器图标时,即可运行。
Darshan Rivka Whittle

2
但是,听起来好像他们想要一个启动器图标,当按下该图标时,可以确保服务正在运行。您的建议完全摆脱了启动器图标。
Darshan Rivka Whittle

@LalitPoptani解决方案很好。但是直到我启动手机,我的服务才会启动。
Meher 2012年

4
除了SyncAdapter之外,我无法在AndroidMenifest.xml中没有MAIN,LAUNCHER的情况下启动我的应用程序。你的回答是真的吗?
Sunghun

1
我删除了带有动作和类别标签的意图过滤器。现在,应用程序不再在android studio中运行
Nauman Ash 2015年

11

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

单击编辑配置(从运行菜单),然后在启动选项部分中将启动值设置为Nothing。然后单击确定并运行该应用程序。

由于没有启动器活动,因此“应用程序”菜单中不会显示任何应用程序。)。


谢谢,这正是我的情况。如果您没有像我一样看到“编辑配置”,请从主菜单中选择“运行”>“运行... ”,然后选择“ 编辑配置...”
PM_

6

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>

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

安装后,该服务将无法运行,但是您可以使用此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
Trismegistos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.