我的应用程序中有以下情形。我的应用程序中没有UI。相反,有一项服务会在启动时启动,并将持续运行。
在没有主活动的情况下如何配置清单文件?我可以在没有任何活动的情况下启动我的应用程序吗?并且在启动我的应用程序时,我的服务应该启动。这可能吗?
我不想进行半透明的活动来启动服务。
Answers:
您说过您不想使用半透明的Activity,但这似乎是实现此目的的最佳方法:
Theme.Translucent.NoTitleBar
。setContentView()
。onCreate()
,从开始服务startService()
。finish()
启动服务后,退出活动。换句话说,您的活动不一定是可见的;只需确保您的服务正在运行,然后退出即可,这听起来像您想要的。
我强烈建议至少显示一个Toast通知,以向用户表明您正在启动服务或该服务已在运行。用户启动器图标按下时似乎无能为力,这是非常糟糕的用户体验。
是的,您可以通过创建一个在应用程序启动时BroadcastReceiver
调用您的方法来实现Service
。这是我给的完整答案。
Android-启动时启动服务
如果您不希望应用程序有任何图标/启动器,您也可以这样做,只是不要使用
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
只需声明您的Service
正常声明即可。
Service
在启动时启动就可以了,但是想知道如何不使用main Activity
,而只需确保Service
按下启动器图标时,即可运行。
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自动启动该服务。这可以在“编辑配置”菜单中完成。