没有活动的 Android 应用程序即服务
Posted
技术标签:
【中文标题】没有活动的 Android 应用程序即服务【英文标题】:Android application as a service without activity 【发布时间】:2018-09-09 12:28:32 【问题描述】:我正在制作一组应用程序,我为所有应用程序提供几乎相同的后台服务。
我正在尝试制作一个只有这个Service
的应用程序。所以我不会在所有这些中重复它,但事情是不需要任何Activity
。因为它不需要 UI,因此用户无法关闭它,除非他们停止 Service
。
我尝试删除Activity
,但应用程序无法运行或启动。
我的问题是:我可以制作一个与Google Play Services
完全一样的应用程序,以便其他应用程序可以使用它的Service
。
如果是,那么非常欢迎使用 sn-p 或示例。
【问题讨论】:
在库项目中创建您的Service
。不可能将Service
作为独立的“应用程序”单独使用。它需要用户通过Activity
手动启动。
你不能开发任何只有服务的应用程序。
【参考方案1】:
当然!没有理由你不能拥有一个只有服务的应用程序。 ...除非您愿意,否则无需进入 AIDL。
问题是,如何让应用程序运行。当您使用 Activity 创建应用程序时,您会在清单中添加一个 Intent 过滤器,使 Activity 可以从 Launcher 启动。如果没有活动,则必须找到另一种方式来启动它。
不过,这很容易做到。只需从您的其他程序中触发一个意图,如下所示:
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 和绑定服务。
已编辑以添加 Intent 过滤器
【讨论】:
感谢您的回答,非常有用。我实际上想知道如何调用该服务。我向服务(应用程序)添加了一个 BroadcastReceiver 并让它在启动时启动,这应该解决服务启动的火灾事件。 @ilyas 是的,应该可以。但是请记住,仅仅因为您在启动时启动它并不意味着它会保持运行。 Android 最终会杀死它。此外,您可以通过仅在实际需要时运行服务来最大限度地减少电池使用...... 如何在 Android Studio 中做到这一点?我不允许创建没有活动的应用程序... 我不明白这是如何解决问题的,您仍在从一个活动启动后台服务,只是从该应用程序中的一个活动开始。 对不起,我的意思是“只是不是来自该应用程序中的活动”。我假设 OP 和我一样,正在寻找一种在启动时启动服务的方法,而无需用户打开任何应用程序。不过我找到了一种使用广播接收器的方法。以上是关于没有活动的 Android 应用程序即服务的主要内容,如果未能解决你的问题,请参考以下文章