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();
2,A程序定义Service,实例化AIDL的接口,并且实现其方法,在onBind()返回实例化的AIDL;
3,也要将A程序定义好的AIDL copy到B项目;这里省略;**
4,B项目连接Service;
5,B项目绑定Service;
6,B项目调用A项目的dosomething()方法
还有一个很重要的一点,是A,B个项目存放AIDL的包名一定要相同,否则绑定AIDL成功,也吊不到对方的方法。
总结:ADIL就是两个不同的程序之间的一个桥梁,两个不同的程序通过绑定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可以互相通讯。
相关文章推荐
- android开发 获取父控件的高宽
- Android 布局之LinearLayout和RelativeLayout
- android几种不同对话框的实现方式
- android中string.xml文件的用法
- android 应用如何实现多个Activity在栈中finish掉
- post,get产生乱码的现象
- Android系统启动流程
- Android ListView和Fragment结合使用,类似于某电商的实现,拿来就能用,详细标注适合新手
- Android ListView和Fragment结合使用,类似于某电商的实现,拿来就能用,详细标注适合新手
- Android新控件RecyclerView剖析
- android绘制view的过程
- Android系统编译原理
- Android eclipse 提示java代码 快捷键
- 使用 adb logcat 显示 Android 日志
- (转)Android和JavaScript互相调用
- Android 屏幕适配方案
- Android 下拉列表框(spinner)
- Android中 在开启的多个Activity中关闭特定的Activity的方法
- 修改Android studio背景主题
- 【Android】监听viewpager子页面里面的Button按钮