您的位置:首页 > 移动开发 > Android开发

Android AIDL使用步骤

2015-08-13 11:08 423 查看
最近项目中用到蓝牙打电话,需要调用AIDL实现,说实话,AIDL之前没有用过,其实不太会,于是网上搜索哈,算是知道怎么用了,具体实现原理还是不太懂,反正知道怎么用了。

原理:就是A程序定义一个AIDL文件,eclipse会自动编译生成class文件,然后在A程序的service里面实现AIDL接口,并且实现AIDL的方法,方法就是你要做什么的,比如打电话的….然后在B项目里面绑定A项目的service,然后就可以调用A项目service里面的方法了。其实就是不同进程之间的方法调用。

写个小DEMO:

实现步骤:

1,A程序定义AIDL叫Test,定义一个dosomething();

interface Test{
void dosomething();
}


2,A程序定义Service,实例化AIDL的接口,并且实现其方法,在onBind()返回实例化的AIDL;

public class Myservice extends Service {

// 初始化AIDL实现其方法,做某些事件
Test.Stub mStub = new Test.Stub() {

public void dosomething() throws android.os.RemoteException {
// AIDL的方法,做某些事件

};

};

@Override
public IBinder onBind(Intent intent) {

return (IBinder) mStub;// 该service绑定AIDL
}

}


3,也要将A程序定义好的AIDL copy到B项目;这里省略;**

4,B项目连接Service;

/**
* 链接service
*/
private ServiceConnection connection = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName arg0) {
mTest = null;
}

@Override
public <
4000
span class="hljs-keyword">void onServiceConnected(ComponentName arg0, IBinder arg1) {
mTest = Test.Stub.asInterface(arg1);
if (mTest == null) {
Toast.makeText(mContext, "bind service failed",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "bind service sucess",
Toast.LENGTH_SHORT).show();
}
}
};


5,B项目绑定Service;

// 绑定AIDL服务,两种方法
第一种代码直接启动service的方式绑定:

Intent intent = new Intent(MainActivity.this, Test.class);
bindService(intent, connection, Context.BIND_AUTO_CREATE);//绑定
startService(intent);//启动service

第二种在A项目的AndroidManifest.xml的Myservice 设置Action启动,根据Action启动对应的service
A项目:
<service android:name="com.test.Myservice"
android:process=":remote" >
<intent-filter>
<action android:name="**com.action.aidl**" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

B项目绑定sevice:
Intent intent = new Intent("**com.action.aidl**");
bindService(intent, connection, Context.BIND_AUTO_CREATE);

总之以上2种都是为了启动service,在service的onbind()方法里面绑定aidl,返回一个aidl
public IBinder onBind(Intent intent) {

return (IBinder) mStub;// 该service绑定AIDL
}


6,B项目调用A项目的dosomething()方法

// 调用AIDL的方法
mTest.dosomething();


还有一个很重要的一点,是A,B个项目存放AIDL的包名一定要相同,否则绑定AIDL成功,也吊不到对方的方法。

总结:ADIL就是两个不同的程序之间的一个桥梁,两个不同的程序通过绑定AIDL可以互相通讯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: