发布时间:2023-04-27 15:00
Step1:创建AIDL 文件
会在 main 包里生成 一个接口文件:
/**
* 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);
这里的方法可以去掉,写成自己的回调方法。注意,AIDL 只支持以下数据类型:
(1)、八种基本数据类型:byte,char,short、int、long、float、double、boolean、String,CharSequence。
(2)、实现了Parcelable接口的数据类型。
(3)、List 类型。List承载的数据必须是AIDL支持的类型,或者是其它声明的AIDL对象。
(4)、Map类型。Map承载的数据必须是AIDL支持的类型,或者是其它声明的AIDL对象。
当我们写好自己回调方法后,Rebuild以下工程,就会生成对应的Stub 。
interface IConnectStatusAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void sendConnectInfo(double fps,double bitrate,double packetLossRate,double rtt,double frames,double height,double width,long durationTime);
}
以上是我自己的接口回调。
Step2:创建Service
public class ConnectInfoService extends Service {
private static final String TAG = ConnectInfoService.class.getSimpleName();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return stub;
}
IConnectStatusAidlInterface.Stub stub = new IConnectStatusAidlInterface.Stub() {
@Override
public void sendConnectInfo(double fps,
double bitrate,
double packetLossRate,
double rtt,
double frames,
double height,
double width,
long durationTime) throws RemoteException {
Log.e(TAG, "stub fps=" + fps+",bitrate="+bitrate+",packetLossRate="+packetLossRate+",rtt="+rtt);
Log.e(TAG, "stub frames=" + frames+",height="+height+",width="+width+",durationTime="+durationTime);
}
};
}
在Manifest 文件中配置
Step3:绑定Service 传输数据
private final ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
statusAidlInterface = IConnectStatusAidlInterface.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Intent intent = new Intent(this, ConnectInfoService.class);
bindService(intent, serviceConnection, BIND_AUTO_CREATE);
if (statusAidlInterface != null) {
try {
statusAidlInterface.sendConnectInfo(stat.clientFps, maxbitrate, stat.packetLostRate, stat.roundTripTime, 0, 0, 0, currentTimeMillis);
} catch (RemoteException e) {
e.printStackTrace();
}
}
以上就是整个AIDL 的创建和使用过程。