利用AIDL机制实现跨进程通信和数据传输,AIDL文件中方法中含有自定义的数据类型,import自定义数据类型后,Eclipse上该行出现红叉,错误提示:
couldn't find import for class ***
【问题原因】:AIDL跨进程通信,进行数据传递时,支持的数据类型有限制,见Android Interface Definition Language (AIDL)中“1.建立.aidl文件”一节描述。对于自定义的数据类型,需要实现parcelable接口
【解决办法】为自定义数据类型添加parcelable接口的实现
【代码示例】:
1. 自定义数据类型AudioEQMode的java代码:
public class AudioEQMode implements Parcelable{
private int mEQMode;
private List<String> mBandList = new ArrayList<String>();
private List<String> mGainList = new ArrayList<String>();
public AudioEQMode(){
}
public void setEQMode(int mode){
mEQMode = mode;
}
public int getEQMode(){
return mEQMode;
}
public void setBand(String band){
mBandList.add(band);
}
public void setGain(String gain){
mGainList.add(gain);
}
public int getBandNumber(){
return mBandList.size();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mEQMode);
dest.writeStringList(mBandList);
dest.writeStringList(mGainList);
}
public static final Creator<AudioEQMode> CREATOR = new Creator<AudioEQMode>() {
@Override
public AudioEQMode createFromParcel(final Parcel source) {
AudioEQMode eqMode = new AudioEQMode();
eqMode.mEQMode = source.readInt();
eqMode.mBandList = source.createStringArrayList();
eqMode.mGainList = source.createStringArrayList();
return eqMode;
}
@Override
public AudioEQMode[] newArray(final int size) {
return new AudioEQMode[size];
}
};
}
2 AIDL文件实现
AudioEQMode.aidl代码:
package com.XXX; // XXX是包名
parcelable AudioEQMode;
引用AudioEQMode数据类型的aidl文件中接口代码:
package com.XXX; // XXX是包名
import com.XXX.AudioEQMode;
......
AudioEQMode getCurrentEQMode();
......