启动没有主要Activity的Android应用程序,启动启动应用程序的Service

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

我怎样才能configuration我的清单文件没有主要的活动? 我可以启动我的应用程序没有任何活动? 而启动我的应用程序,我的服务应该开始。 这有可能以任何方式? 我不想做半透明的活动来启动服务。

提前致谢!!!

你说你不想使用半透明的活动,但这似乎是做到这一点的最佳方式:

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

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

我强烈build议至less显示一个Toast通知,告知用户您正在启动服务,或者它已经在运行。 有一个启动器图标,当你按下它什么都不做,这是非常糟糕的用户体验。

是的,只需创build一个在您的应用程序启动时调用您的ServiceBroadcastReceiver 。 这是我给出的完整答案。
Android – 开机启动服务

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

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

只要声明你的Service正常申报。

Android Studio版本2.3

您可以按照几个简单的步骤创build一个没有主要活动的服务。 你将能够通过Android Studio安装这个应用程序,并像普通的应用程序一样进行debugging。

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

现在,在“运行”button(绿色箭头)旁边的下拉列表中,进入“编辑configuration”,在“启动选项”中select“无”。 这将允许您在没有Android Studio的情况下安装您的服务,抱怨没有主要活动。

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

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

可以检查它正在运行…

 ps | grep whatever 

我还没有尝试,但你可能会有Android Studio自动启动服务。 这将在“编辑configuration”菜单中完成。