私の問題は、この質問とこの質問に似ているようですが、少し異なります。
ライブラリ プロジェクトにある AIDL サービスを作成し、それをアプリケーションで使用しています。私のアプリケーションには、インターフェースで使用できるようにパーセル化したクラス Vehicle があります。(ライブラリにあるサービスからアプリケーションへの車両のリストを取得したい)
アプリケーションとライブラリの両方に Vehicle.java が必要ですか?
両方に Vehicle.aidl が必要ですか?
アプリケーションとライブラリの両方に Vehicle.java AND Vehicle.aidl があり、アプリケーションで問題が発生し始めました。インターフェイス Eclipse からメソッドを呼び出したときに、アプリケーションではなくライブラリ クラスの Vehicle として定義する必要がありました。 (ただし、それらは同じであり、どちらも分割可能です)。
public List<Vehicle> getVehicles(){...code... }
これを解決するために、IRemoteInterface.aidl でライブラリの vehicle クラスではなく、アプリケーションの vehicle クラスにしようとしました (以下にリストされているバリエーションでは、インポートが見つからないというエラーが表示されます。他のバリエーションではリストでインポートなしのように、不明な戻り値の型と表示されます)。
package LIBRARY;
import LIBRARY.RelPoint;
import LIBRARY.IRemoteServiceCallback;
import LIBRARY.FleetStatus;
import APPLICATION.Vehicle;
interface IRemoteInterface {
int getPid();
void registerCallback(IRemoteServiceCallback callback);
void unregisterCallback(IRemoteServiceCallback callback);
List<Vehicle> getVehicles();
}
アプリケーションからのパーセル可能な Vehicle クラスは次のとおりです。
package APPLICATION;
import java.util.Date;
import android.os.Parcel;
import android.os.Parcelable;
public class Vehicle implements Parcelable {
public static final String TAG = "Vehicle";
long vehicleID;
long trackID;
String vehicleName;
public static final Parcelable.Creator<Vehicle> CREATOR = new Parcelable.Creator<Vehicle>() {
public Vehicle createFromParcel(Parcel src) {
return new Vehicle(src);
}
public Vehicle[] newArray(int size) {
return new Vehicle[size];
}
};
public Vehicle(Parcel src) {
readFromParcel(src);
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(vehicleID);
dest.writeLong(trackID);
dest.writeString(vehicleName);
}
public void readFromParcel(Parcel src) {
vehicleID = src.readLong();
trackID = src.readLong();
vehicleName = src.readString();
}
public int describeContents() {
// nothing special
return 0;
}
public Vehicle() {
}
//getter and setter methods below that I removed
}