服务和单独的应用程序之间的数据共享(单向通信)。 (机器人)

时间:2017-02-06 12:18:32

标签: android service usb background-process

考虑在服务中生成的数据(连续),我希望其他应用程序从服务中检索数据。

示例:App A(服务)将打开串口并与外部设备通信以获取数据。

应用程序B(独立应用程序)必须从服务中读取数据(来自外部设备的数据)。我没有这样做,因为我需要从外部设备检索数据,即使App B没有运行,我还有3个其他需要外部设备相同数据的应用程序,因此我决定在后台运行服务。

1 个答案:

答案 0 :(得分:2)

您可以使用Broadcasts

在您使用该服务的应用中,您可以将Intent广播到系统,然后其他应用可以将其接收。

在使用该服务的应用中,您可以发送如下广播:

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方法在运行时注册接收器,而不是在清单中注册

修改
据我所知,这是在多个应用程序之间进行通信的最简单方法。但请注意:正如评论中所述,这不是请求。该服务知道谁或任何人都在收听广播 但是,您可以从客户端应用程序向服务应用程序发送广播以启动或停止服务 您还可以在App A中使用IntentService并从其他应用程序启动它(在其他应用程序中使用ResultReceiver)。 或者您也可以查看ContentProviders

AIDL是一个选项,但我不建议你这样做,因为它更高级。