将数据从 activity 发送到第三方服务

Send data from an activity to a third part service

首先,我想道歉,因为我很确定我需要的所有信息都已经在 Whosebug 上的某个地方了。 问题是,我发现了与我的情况非常相似的情况,但不完全是这个,所以我考虑询问正确的作案手法来为这种情况创建最终 "how-to",以帮助未来的开发者

我需要编写一个后台服务,UI-less,它将发送和接收来自第三方应用程序的数据(已经存在,我只需要在代码中包含 send/receive与我的服务共享的数据)

让我们关注 App-->send-->Service 流程,因为我猜反过来也是一样的

根据我在这里收集的内容,我必须

在我的 BroadcastReceiver 的 onReceive() 中,我将检查我的 intent.getAction() 是否具有相同的我期待的字符串(因为广播是系统范围的并且实际上发送可以拦截它们,对吗?) - 如果是这样,我会做我的事

问题:

  1. 首先,这是正确的作案手法吗?
  2. 我的服务 运行 与我的 Activity 在同一个线程中,对吗?那么如果我 finish() 我的 MainActivity 会发生什么?我该怎么做才能让我的服务始终 运行 在后台运行?
  3. 在任何我想发送数据以从我的服务接收的应用程序中,我是否只需要创建一个 Intent("My_Action")(相同的字符串我期待在另一边)并做 sendBroadcast(intent) ?
  4. 我应该使用 Service 还是 IntentService?在我的情况下,什么更好?
  5. 我是否必须在我的服务或其他第 3 部分应用程序中的清单中写入任何内容?

非常感谢您的专业知识,因为这项服务将成为很多机器上的重要组成部分,我想确保我正在以最好的方式做到这一点,而不仅仅是一些不稳定的使其工作的代码

  1. 根据您希望如何启动 "send data" 进程,有不同的方法。看起来发送是短暂的 - 所以 IntentService 是合适的。如果总是来自 activity 中的某些用户操作,只需调用 startService。如果公开发送,那么其他应用程序(不是您的应用程序)可以使用它,请参阅 Create an android service which can be called only by certain apps . There are use cases where starting the service is via a broadcast - see https://blog.nraboy.com/2014/10/use-broadcast-receiver-background-services-android/.

  2. 是的,应用程序上的服务 运行(未绑定到任何 activity)线程。完成 activity 与 运行ning(已启动)服务无关 - 服务将继续 运行。如果您希望服务 运行(无论如何),您必须在服务中获取唤醒锁。

  3. 如果您想从应用程序内部发送数据(通过服务),只需调用 startService()。我不确定您是否要求其他应用能够通过您的服务发送数据。

  4. Service vs IntentService or What is the difference between an IntentService and a Service?

  5. 必须在清单中定义服务。参见 http://developer.android.com/guide/topics/manifest/service-element.html and http://developer.android.com/guide/components/services.html 也许您询问更多有关定义启动服务的意图 (Purpose of Service Intent-Filter inside Manifest.xml)?