我在系统应用程序中有一个服务。我希望没有系统权限的客户端应用程序能够调用服务中的函数来执行需要系统权限的操作。由于服务位于其自己的应用程序中,因此我使用 AIDL 为服务和客户端应用程序之间的 IPC 定义接口(interface)。
我希望制作客户端应用程序的人能够编写自己需要系统权限的代码,并向我提供要包含在我的服务中的代码。因此,我的服务将收到一个通用请求,指示将请求传递到何处以及请求本身。
由于我不知道客户端需要将哪些数据传入/传出到他们自己的代码中,所以我想使用通用接口(interface)来处理他们可能需要的任何类型的数据。我是否需要为每种数据类型向 AIDL 接口(interface)添加一个函数:
void doStuff(in String inStr, out String outStr);
void doStuff(in int inInt, out int outInt);
等等...
制作我自己的可打包对象会更好吗?使用 AIDL 处理此问题的最佳方法是什么?
最佳答案
您的问题分为两部分:
a.) 服务(指示将请求传递到何处):
您可以获取调用者 UID,然后将其用作作业/请求指示符。
b) AIDL 类型:
默认情况下,AIDL 支持以下数据类型:
1.) Java 编程语言中的所有基本类型(例如 int、long、char、boolean 等) 2.) 字符串 3.) 字符序列 4.) 列表
如果您有任何其他对象,那么您需要创建自己的可分割对象。
关于Android 服务 AIDL 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14328494/