如何将流(InputStream / OutputStream)发送到aidl?

How to send stream (InputStream / OutputStream) to aidl?

我有一个应用程序在 IPC AIDL 进程上工作,我想在进程(我的应用程序和 AIDL 进程)之间共享流,然后如何做。 我知道我们只能通过 aidl 发送原始数据类型和可打包对象,但我的要求是将输入和输出流发送到 aidl 进程。 如何实现。

您不能通过 AIDL 直接发送流。

您可能需要将数据流包装在 ContentProvider 中,因为它支持流式传输。然后,通过 AIDL 传递指向您的提供商及其流的 Uri

根据流的来源,您可能能够获得基础数据的 ParcelFileDescriptor,并且可以通过 AIDL 传递。

您可以使用 OpenKeychain 的 API 库中的 ParcelFileDescriptor.createPipe(). See ParcelFileDescriptorUtil

调用应用程序使用一个 ParcelFileDescriptor 来读取(或写入),另一个被传递给接收应用程序并使用它来写入(或读取)。