一、AIDLDemoServer
Person.java
package com.aidl.aidl;
import android.os.Parcel;
import android.os.Parcelable;
public class Person implements Parcelable {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private Person(Parcel in){
id=in.readInt();
name=in.readString();
}
public Person() {
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(id);
out.writeString(name);
}
public static final Parcelable.Creator<Person> CREATOR=new Creator<Person>() {
public Person[] newArray(int size) {
return new Person[size];
}
public Person createFromParcel(Parcel in) {
return new Person(in);
}
};
}
Person.aidl
package com.aidl.aidl;
parcelable Person;
IDownloadService.aidl
package com.aidl.aidl;
import com.aidl.aidl.Person;
interface IDownloadService{
Person download();
}
DownloadService.java
package com.aidl.server;
import com.aidl.aidl.IDownloadService;
import com.aidl.aidl.Person;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class DownloadService extends Service {
private ServiceBinder serviceBinder=new ServiceBinder();
@Override
public IBinder onBind(Intent intent) {
return serviceBinder;
}
public class ServiceBinder extends IDownloadService.Stub{
public Person download() throws RemoteException {
Person p=new Person();
p.setId(1);
p.setName("scott");
return p;
}
}
}
注册DownloadService
<service
android:name=".DownloadService"
>
<intent-filter >
<action android:name="com.aidl.server.DownloadService" />
</intent-filter>
</service>
二、AIDLDemoClient
把AIDLDemoServer中的com.aidl.aidl包拷贝过来。
AIDLDemoClientActivity.java
package com.aidl.client;
import com.aidl.aidl.IDownloadService;
import com.aidl.aidl.Person;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
public class AIDLDemoClientActivity extends Activity {
private IDownloadService downloadService;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.bindService(new Intent("com.aidl.server.DownloadService"),
serviceConnection, BIND_AUTO_CREATE);
}
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
downloadService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
downloadService = IDownloadService.Stub.asInterface(service);
try {
Person p=downloadService.download();
System.out.println("ID:"+p.getId());
System.out.println("Name:"+p.getName());
} catch (RemoteException e) {
e.printStackTrace();
}
}
};
protected void onDestroy() {
super.onDestroy();
unbindService(serviceConnection);
}
}
先运行AIDLDemoServer,在运行AIDlDemoClient,打印结果为: