Android: заставьте 2 службы общаться - PullRequest
2 голосов
/ 05 мая 2011

Мое приложение в настоящее время имеет 2 услуги и 1 активность. Мой первый сервис, называемый сенсором, просто возвращает все значения датчиков телефона. Затем у меня есть вторая служба под названием Waypoint, которая обязана отправлять команды на мою карту Arduino, чтобы мой робот достиг точки. Таким образом, датчик отправляет значения в маршрутную точку. Более того, я привязал Waypoint к своей Activity, чтобы «видеть» команды, которые отправляются. Однако я не знаю, как заставить мои 2 службы взаимодействовать (как я могу отправить значения датчиков в мою службу Waypoint?), У кого-нибудь будет руководство по этому поводу? Я только видел учебник о связи между услугами и деятельностью ...

Спасибо всем!

PS: простите за мой английский ...

РЕДАКТИРОВАТЬ:

Спасибо за ваши ответы!

Я просто сделал то, что вы оба сказали, но это, похоже, не работает (у меня нет ошибок, но ничего не отображается, я хотел бы дать вам мой код, но он слишком длинный ...). Хорошо, если у вас есть смелость: http://paste.tgl0be.org/?id=10458.

Вот что я пытаюсь сделать:

  1. Служба «Мои датчики» получает значения всех датчиков и отправляет азимут и логическое значение запущенной службы с помощью метода sendBroadcast.
  2. Waypoint имеет широковещательный приемник, который получает от служб датчиков значения отправку и обновляет свои собственные переменные (поэтому здесь только азимут и запущен)
  3. Connexion отображает значение азимута

Но ничего не отображается ... У кого-нибудь есть представление о проблеме? (кто-то, кто читал мой код, очевидно)

Не знаю, соблюдаю ли я правила форума, на самом деле, я не думаю, что ОТВЕТИЛ на мой вопрос ... Если так, извините ...

Опять извините за мой английский


Новое редактирование:

Наконец-то я могу получить некоторые результаты, на самом деле всегда 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 ]

2 голосов
/ 05 мая 2011

Поскольку ваша служба датчиков взаимодействует асинхронно с услугой Waypoint, вы можете настроить службу Sensor для отправки широковещательной передачи с дополнительными данными (данными датчика), а служба Waypoint зарегистрирует BroadcastReceiver для получения этих передач.

0 голосов
/ 05 мая 2011

Вы можете использовать одни и те же методы связи для сервиса Activity <-> между двумя сервисами.Я бы предложил http://developer.android.com/reference/android/app/Service.html#LocalServiceSample в качестве одного из подходов: служба Sensor свяжется со службой Waypoint и сможет затем отправить ей значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...