관리 메뉴

드럼치는 프로그래머

[안드로이드] AIDL Custom Object 전달 본문

★─Programing/☆─Android

[안드로이드] AIDL Custom Object 전달

드럼치는한동이 2013. 4. 22. 09:54

내가 만든 객체를 IPC를 통해 전달하려면 Parcelable Interface 를 implement 해야한다.

내가 만든 클래스가

class ProcessPrivacyInfo {
String processName;
byte accessInfo;
}

라고 한다면 수정된 클래스는 Parcelable의 두가지 메소드 와 한가지 필드
int describeContents()
void writeToParcel(Parcel dest, int flags)
public static final Parcelable.Creator CREATOR 를 선언해야 한다.

수정하면 아래와 같다.


import android.os.Parcel;
import android.os.Parcelable;

class ProcessPrivacyInfo implements Parcelable {
String processName;
byte accessInfo;

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public ProcessPrivacyInfo createFromParcel(Parcel in) {
return new ProcessPrivacyInfo(in);
}

public ProcessPrivacyInfo[] newArray( int size ) {
return new ProcessPrivacyInfo[size];
}
};

public ProcessPrivacyInfo(Parcel in) {
processName = in.readString();
accessInfo = in.readByte();

}

public int describeContents() {
// TODO Auto-generated method stub
return 0;
}

public void writeToParcel(Parcel dest, int flags) {
dest.writeString(processName);
dest.writeByte(accessInfo);
}
}

이렇게 클래스를 수정한 후 같은 폴더 내에 같은 파일명의 aidl 파일을 만들고 해당 객체가 Parcelable 이라고 선언해준다.

만약 이걸 안만들고 그냥 import 할 경우 컴파일시 import문에서 해당 클래스를 찾을수없다고 에러가 뜬다.

<ProcessPrivacyInfo.aidl>

package android.app;
Parcelable ProcessPrivacyInfo;

그리고 마지막으로 해당 객체를 사용할 aidl 파일에 객체를 import 해준다.

<IPrivacyManager.aidl>

package android.app;
import android.app.ProcessPrivacyInfo;

interface IPrivacyManager{
List<ProcessPrivacyInfo> getProcessList();
...
}

 

[출처]  http://nasabong.tistory.com/entry/aidl-Custom-Object-%EC%A0%84%EB%8B%AC

Comments