官方文档https://developer.android.com/guide/components/aidl
要实现这个功能只能让机器人作为服务端启用Service
,如果要实现qq那边实现,那么则需要修改软件,或者通过反射等方法实现,但是这种方式实现必然有弊端,而且实现起来估计不容易。
Parcel:unable to marshalValue
此问题表示传递的东西必须序列化,否则无法通过aidl发送过去
DeadObjectException。表示服务以及死掉了,绑定的连接对象已经无法使用了,应该删除
package cn.qssq666.robot;
import java.util.List;
import java.util.Map;
interface ICallBack {
void actionPerformed (int actionId);
//基本数据类型默认为in can be an out type, so you must declare it as in, out or inout. 'out String flag2' can only be an in parameter.
void onReceiveMsg( int flag, boolean flag1, String flag2,in Map map,in List list);
}
// RobotCall.aidl
package cn.qssq666.robot;
import cn.qssq666.robot.ICallback;
// Declare any non-default types here with import statements
interface RobotCallBinder {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
void registerCallback(in ICallBack cb);
void unregisterCallback( in ICallBack cb);
boolean isTaskRunning();
void stopRunningTask();
List queryData(int action,boolean flag1,String flag2);
Map queryMapData(int action,boolean flag1,String flag2);
}
基本类型不需要加in ,默认为in,而非基本类型必须加in
或者inout
,或者out
不支持重载参数
:app:preDebugBuild UP-TO-DATE
G:\newproject\AndroidServiceHost\app\src\main\aidl\cn\qssq666\robot\ICallback.aidl:12 attempt to redefine method queryData,
G:\newproject\AndroidServiceHost\app\src\main\aidl\cn\qssq666\robot\ICallback.aidl:11 previously defined here.
只支持基本类型和序列化的对象或者 纯Map
,或者List
或者String
而不是arraylist