Android:让2个服务进行通信

时间:2011-05-05 16:10:50

标签: android multithreading service

我的应用程序目前有2项服务和1项活动。我的第一项服务称为传感器,只返回手机传感器的所有值。然后我有一个名为Waypoint的第二个服务,它必须向我的Arduino卡发送命令,让我的机器人到达一个航路点。因此,在某种程度上,Sensor会将值发送给Waypoint。此外,我将Waypoint绑定到我的Activity以“看到”发送的命令。但是,我不知道如何让我的2个服务进行通信(如何将传感器的值发送到我的Waypoint服务?),是否有人会有相关的教程?我只看过有关服务和活动之间沟通的教程......

谢谢大家!

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

编辑:

感谢您的回答!

我刚刚做了你们所说的但似乎没有工作(我没有错误,但没有显示,我想给你我的代码,但它太长了......)。好吧,如果你有勇气:http://paste.tgl0be.org/?id=10458

以下是我要做的事情:

  1. 我的传感器服务获取所有传感器的值,并使用sendBroadcast方法发送方位角和启动服务布尔值。
  2. Waypoint有一个广播接收器,它获取值传感器服务发送和更新自己的变量(所以这里只有方位角并开始)
  3. Connexion显示方位角的值
  4. 但是什么都没有显示......有人会对这个问题有所了解吗? (显然是读过我的代码的人)

    我不知道我是否尊重论坛规则,确实我认为我没有回答我的问题......如果是的话,抱歉......

    再次抱歉我的英文


    新编辑:

    我终于可以得到一些结果,实际上总是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中声明一个非静态内部类?

2 个答案:

答案 0 :(得分:2)

由于您的传感器服务与Waypoint服务异步通信,因此您可以让传感器服务使用额外数据(传感器数据)发送广播,并且Waypoint服务会注册BroadcastReceiver以获取这些广播。

答案 1 :(得分:0)

您可以对Activity&lt; - &gt;使用相同的通讯技巧两项服务之间的服务。我建议将http://developer.android.com/reference/android/app/Service.html#LocalServiceSample作为一种方法:传感器服务将绑定到Waypoint服务,然后可以将值发送给它。