Вы можете использовать Broadcasts.
В вашем приложении с услугой вы можете транслировать намерения в систему, которые затем могут быть загружены другими приложениями.
В приложении с услугой вы можете отправить радиопередачу так:
public class MyService extends Service {
public static final String ACTION_PUBLISH_DATA = "com.example.action.publish_data";
public void publishResult(Bundle data) {
Intent intent = new Intent(ACTION_PUBLISH_DATA);
intent.putExtras(data);
sendBroadcast(intent);
}
}
В клиентских приложениях, создать вещательный приемник:
public class DataBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// do something with data in the intent.
}
}
и зарегистрировать его в манифесте как так :
<application>
...
<receiver android:name="com.example.DataBroadcastReceiver">
<intent-filter>
<action android:name="com.example.action.publish_data" />
</intent-filter>
</receiver>
</application>
Вместо регистрации в вашем манифесте вы также можете зарегистрировать приемник во время выполнения с помощью registerReceiver методы
Редактировать:
Это, насколько я знаю, самый простой способ для обмена данных между несколькими приложениями. Но учтите: как сказано в комментариях, это не по запросу. Служба знает, кто, или кто-то вообще, слушает трансляции.
Вы также можете отправлять трансляции из клиентского приложения в сервисное приложение, чтобы запустить или остановить службу.
Вы также можете использовать IntentService в своем приложении A и запускать его из других приложений (с помощью ResultReceiver в дополнение). Или вы также можете изучить ContentProviders
AIDL вариант, но я бы не рекомендовал это для вас, так как он более продвинутый.
Если вы делаете это через HTTP, я бы предложил либо посмотреть на веб-сокеты, либо рассмотреть возможность переключения на выгрузку данных у пользователя. HTTP - это протокол запроса/ответа. В управлении получением данных существует большая сложность. Лучше оставить сервис из него и позволить клиентам выяснить, что им нужно. – duffymo
Как часто изменяются данные? Каков размер данных? Вы ищете push-решение (услуга делает что-то, что может привести к тому, что изменения будут доставляться клиенту), решение pull (услуга отвечает только на запросы данных от клиента) или и то, и другое? IOW, это мало связано с последовательными портами и имеет много общего с характером обмена данными. – CommonsWare
@CommonsWare Я хочу, чтобы служба отвечала на запрос, и я не знаю, как часто меняются данные. – NKR