Android开发 AIDL使用自定义对象作参数或返回值

http://www.pocketdigi.com/20121129/952.html

默认,AIDL支持对象作参数,但需要该对象实现Parcelable接口,且aidl文件应该是该类在同一包下,需要单独给该类定义一个aidl文件.
定义模型类:
EnglishItem.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package com.pocketdigi.english.aidl;
 
import android.os.Parcel;
import android.os.Parcelable;
 
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.pocketdigi.english.utils.Constants;
import com.pocketdigi.english.utils.Des;
 
@DatabaseTable(tableName = "listenlist")
public class EnglishItem implements Parcelable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -1756522544697525757L;
	@DatabaseField(id = true)
	private int id;
	@DatabaseField
	private String title;
	@DatabaseField
	private String category;
	@DatabaseField
	private String mp3url;
	@DatabaseField
	private String lrcurl;
	@DatabaseField
	private String txturl;
 
	public static final Parcelable.Creator<EnglishItem> CREATOR = new Parcelable.Creator<EnglishItem>() {
		public EnglishItem createFromParcel(Parcel in) {
			return new EnglishItem(in);
		}
 
		public EnglishItem[] newArray(int size) {
			return new EnglishItem[size];
		}
	};
 
	private EnglishItem(Parcel in)
	{
		readFromParcel(in);
	}
 
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}
 
	public String getTitle() {
		return title;
	}
 
	public void setTitle(String title) {
		this.title = title;
	}
 
	public String getCategory() {
		return category;
	}
 
	public void setCategory(String category) {
		this.category = category;
	}
 
	public String getMp3url() {
		return Des.decodeValue(Constants.DES_KEY, mp3url);
	}
 
	public void setMp3url(String mp3url) {
		this.mp3url = mp3url;
	}
 
	public String getLrcurl() {
		return Des.decodeValue(Constants.DES_KEY, lrcurl);
	}
 
	public void setLrcurl(String lrcurl) {
		this.lrcurl = lrcurl;
	}
 
	public String getTxturl() {
		return Des.decodeValue(Constants.DES_KEY, txturl);
	}
 
	public void setTxturl(String txturl) {
		this.txturl = txturl;
	}
 
	@Override
	public int describeContents() {
		// TODO Auto-generated method stub
		return 0;
	}
 
	@Override
	public void writeToParcel(Parcel out, int flag) {
		// TODO Auto-generated method stub
		out.writeInt(id);
		out.writeString(title);
		out.writeString(category);
		out.writeString(mp3url);
		out.writeString(lrcurl);
		out.writeString(txturl);
	}
	/**
	 * 读
	 * @param in
	 */
	public void readFromParcel(Parcel in)
	{
		id=in.readInt();
		title=in.readString();
		category=in.readString();
		category=in.readString();
		lrcurl=in.readString();
		txturl=in.readString();
	}
}

Parcelable.Creator不可少。
同包下定义一个EnglishItem.aidl:

1
2
package com.pocketdigi.english.aidl;
parcelable EnglishItem;

最后是调用接口aidl:
PlayerAidl.aidl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.pocketdigi.english.aidl;
 
import com.pocketdigi.english.aidl.EnglishItem;
 
interface PlayerAidl {
	/**
	*传入列表
	**/
	void putList(inout List<EnglishItem> item);
	/**
	*播放指定音频
	**/
	void play(int index);
	void pause();
	/**
	*暂停后恢复播放
	**/
	void resume();
	/**
	*删除指定项
	**/
	void delete(int position);
	/**
	*停止服务
	**/
	void stopService();
}
posted @ 2014-08-19 18:36  wanqi  阅读(2209)  评论(0编辑  收藏  举报