Android之AIDL

一、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,打印结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值