安卓 : Make 2 services communicate

标签 android multithreading service

我的应用程序目前有 2 个服务和 1 个 Activity 。我的第一个服务,叫做传感器,只返回手机传感器的所有值。然后我有第二个服务叫做 Waypoint,它会向我的 Arduino 卡发送命令,让我的机器人到达一个路点。因此,在某种程度上,Sensor 将值发送到 Waypoint。此外,我将 Waypoint 绑定(bind)到我的 Activity 以“查看”发送的命令。但是,我不知道如何让我的 2 个服务进行通信(如何将传感器的值发送到我的 Waypoint 服务?),有人有这方面的教程吗?我只看到有关服务和 Activity 之间通信的教程...

谢谢大家!

PS:对不起我的英语...

编辑:

感谢您的回答!

我只是按照你们所说的做了,但它似乎不起作用(我没有错误,但没有显示任何内容,我想给你我的代码,但它太长了......)。好吧,如果你有勇气:http://paste.tgl0be.org/?id=10458 .

这是我正在尝试做的:

  1. 我的传感器服务获取所有传感器的值,并使用 sendBroadcast 方法发送方位角和启动服务 bool 值。
  2. Waypoint 有一个广播接收器,它获取传感器服务发送的值并更新它自己的变量(所以这里只有方位角和开始)
  3. 连接显示方位角值

但是什么也没有显示...有人知道这个问题吗? (显然有人读过我的代码)

我不知道我是否尊重论坛规则,事实上我不认为我回答了我的问题...如果是这样,抱歉...

再次为我的英语感到抱歉


新编辑:

我终于可以得到一些结果,实际上总是 0...我想知道我的接收器是否正确声明到我的 AndroidManifest 中,因为我的接收器是 Waypoint 的内部类,这是我的代码:

<?xml version="1.0" encoding="utf-8"?>

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Connexion"
              android:label="@string/app_name">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

     <receiver class=".Waypoint$Receiver" android:name=".Waypoint$Receiver">
        <intent-filter>
            <action android:name="android.intent.action.EVENT_ACTION" />
        </intent-filter>
    </receiver>

    <service android:name=".Sensors" android:enabled="true"/>
    <service android:name=".Waypoint" android:enabled="true"/>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
<uses-permission android:name="android.permission.LOCATION" />

我认为不是,它可以解释问题。 “$”符号用于内部静态类,而我的 Receiver 不是静态的。有谁知道如何在 AndroidManifest 中声明一个非静态内部类?

最佳答案

由于您的传感器服务与 Waypoint 服务异步通信,您可以让传感器服务发送带有额外数据(传感器数据)的广播,Waypoint 服务将注册 BroadcastReceiver 以获取这些广播。

关于安卓 : Make 2 services communicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900903/

相关文章:

java - 使用 ExecutorService 时出现超时问题

c - 竞争条件和互斥体

android - 停止服务内的线程

c# - 关闭\销毁异步方法中的 Activity

java - Deflater 使(加密的)byte[] 变大

android - 控制 Ok SoftKeyboard 按钮 Android

android - 如何手动从 jitpack.io 下载 aar 和 pom 文件?

java - 如何在多线程中使用等待和通知协议(protocol)

iOS后台服务手动数据存储

web-services - 如何将预测引擎作为服务运行