无需活动的Android应用服务化

39

我正在制作一组应用程序,它们的后台服务基本相同。

我试图制作一个仅具有此Service的应用程序。这样我不必在所有应用程序中重复编写,但问题是不需要任何Activity。因为它不需要用户界面,所以用户除非停止Service否则无法关闭它。

我尝试删除Activity,但然后应用程序无法运行或启动。我的问题是:我可以做一款像Google Play Services一样的应用程序,从而使其他应用程序可以使用它的Service吗?

如果可以的话,代码片段或示例将非常受欢迎。


2
在库项目中创建您的“Service”。无法将“Service”作为独立的“应用程序”单独存在。它需要通过“Activity”由用户手动启动。 - Squonk
你不能只依靠服务来开发任何应用程序。 - Bhavesh Jethani
1个回答

39

当然可以只有一个服务的应用程序,没有任何理由不可以。如果你不想用AIDL也没关系。

问题在于如何运行这个应用程序。当你创建一个带有Activity的应用程序时,在清单文件中添加Intent filter,使得该Activity可以从Launcher启动。如果没有Activity,你就必须找到另一种方式来启动它。

但这很容易做到,只需从其他程序中发送intent即可,例如:

startService(new Intent("my.service.intent"));

...在您的清单文件中注册服务,就像这样:

        <service android:name=".SomeService" >
          <intent-filter>
            <action android:name="my.service.intent"/>
          </intent-filter>
你可以使用该Intent将可Parcelable参数传递给服务,服务可以通过广播Intent回复。当然,如果您确实需要应用程序和服务之间的复杂API,startService和broadcastIntent有点笨拙。如果需要更丰富的内容,建议研究AIDL和Bound Service。编辑以添加Intent Filter。

谢谢你的回答,它非常有用。实际上我想知道如何调用服务。我向服务(应用程序)添加了BroadcastReceiver,并使其在启动时启动,这应该解决服务启动的触发事件。 - iLyas
@ilyas 是的,那应该可以。不过要记住,仅仅因为你在启动时运行它并不意味着它会一直保持运行状态。Android系统最终会将其终止。此外,只有在实际需要时运行你的服务,可以最大程度地减少电池使用量... - G. Blake Meike
1
我该如何在Android Studio中实现这个?它不允许创建没有活动的应用程序... - Libathos
@MattD 你为什么认为它必须在同一个应用程序中? - G. Blake Meike
1
抱歉,我的意思是“只是不从该应用程序的活动中启动”。我认为OP和我一样,都在寻找一种方法,在用户根本不打开任何应用程序的情况下启动服务。不过我找到了一种使用广播接收器的方法。 - Matt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接