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

时间:2015-04-10 14:56:00

标签: java android service broadcast

首先,我想道歉,因为我很确定我需要的所有信息都已经在stackoverflow上了。 问题是,我发现像我这样的情况非常相似,但不完全是这个,所以我想问一下正确的操作方法,为这种情况创建一个最终的“操作方法”,以帮助未来的开发者

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

让我们专注于 App - &gt; send - &gt; Service 流程,因为我猜其他方式是相同的

从我在这里收集到的,我必须

  • 创建一个服务,我将在 finish()之前在我的MainActivity中开始
  • 声明 IntentFilter addAction()我的自定义字符串以识别我的操作
  • registerReceiver()我的接收器和我的过滤器

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

问题:

  1. 首先,这是正确的运作方式吗?
  2. 我的服务与我的活动在同一个主题中运行,对吧?那么如果我完成()我的MainActivity会怎样?无论如何,我该怎样做才能让我的服务始终在后台运行?
  3. 在我想要发送从我的服务接收数据的任何应用程序中,我是否只需要创建 Intent(“My_Action”)(我希望在另一个上使用相同的字符串) (并) sendBroadcast(意图)
  4. 我应该使用Service还是IntentService?在我的情况下有什么好处?
  5. 我是否必须在Manivesst中编写任何内容,无论是在我的服务中还是在其他第三方应用程序中?
  6. 非常感谢您的专业知识,因为这项服务将成为许多机器的关键部分我想确保我这样做是最好的方式,而不仅仅是一些不稳定的make-it-work代码

1 个答案:

答案 0 :(得分:1)

  1. 根据您希望“发送数据”流程的启动方式,有不同的方法。看起来发送是短暂的 - 所以IntentService是合适的。如果总是来自您活动中的某些用户操作,请调用startService。如果暴露发送,那么其他应用程序(不是您的)可以使用它,请参阅Create an android service which can be called only by certain apps。有些用例是通过广播启动服务 - 请参阅https://blog.nraboy.com/2014/10/use-broadcast-receiver-background-services-android/

  2. 是的,服务在app上运行(不依赖于任何活动)线程。完成一项活动与正在运行(已启动)的服务无关 - 该服务将继续运行。如果您希望服务运行(无论如何),您必须在服务中获得唤醒锁。

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

  4. 请参阅Service vs IntentServiceWhat is the difference between an IntentService and a Service?

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

相关问题