安卓四大组件之二#2-使用AIDL技术实现动态调用其他app中的Service的方法
2013-09-05 20:33
1071 查看
上次我给大家介绍了Service的基本用法,其中有提到过如何访问自身app的Service,现在我来为大家介绍如何访问其他app的Service
1:创建一个安卓项目app1并且新建一个service,在Service清单文件中配置访问此服务所需要的过滤条件
清单代码如下
3:在创建一个app2项目(用来启动app1中Service的方法),将aidl后缀的文件拷贝到app2项目里面来(记住拷贝的aidl所放在的包名要跟原来的一样)
4: 回到app1的service中写一个内部类继承IMybinder.stub,重写start()方法里面调用Service的方法,然后在Service的onBind方法返回一个Mybinder对象
(如下图中play()方法是在Service里面的,然后在play方法里面打个日志已便检查是否调用成功)
这里的调用比较复杂需要在2个app中来回写方法,我会把这次的源代码上传到我的上传(名字为博客标题),有需要的可以去下载。Service基本就说到这,下次我为大家介绍安卓第三大组件BroadCastReceiver(广播机制)
1:创建一个安卓项目app1并且新建一个service,在Service清单文件中配置访问此服务所需要的过滤条件
清单代码如下
<service android:name="com.example.aidl.MyService" android:enabled="true" android:exported="true" > <intent-filter > <action android:name="org.yi.Action"/> </intent-filter> </service>2:创建一个接口IMybinder,然后随便写个方法,写完后把修饰接口的public删掉,
interface IMyBinder { void start(); }然后找到接口文件所在的文件目录,将文件后缀名改为aidl然后回到想到项目刷新,这时候gen目录会自动生成一个IMyBind的java文件,如下图(万恶的水印。。。)
3:在创建一个app2项目(用来启动app1中Service的方法),将aidl后缀的文件拷贝到app2项目里面来(记住拷贝的aidl所放在的包名要跟原来的一样)
4: 回到app1的service中写一个内部类继承IMybinder.stub,重写start()方法里面调用Service的方法,然后在Service的onBind方法返回一个Mybinder对象
(如下图中play()方法是在Service里面的,然后在play方法里面打个日志已便检查是否调用成功)
class MyBinder extends IMyBinder.Stub { public void start() { play(); } } @Override public IBinder onBind(Intent intent) { return new MyBinder(); } public void play() { Log.e("MyService", "这是app1中Service的play方法"); }5:在app2中放入一个按钮并在监听事件中调用app1中服务的方法
//利用intent的隐式意图启动另外一个app的服务 findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent service = new Intent(); service.setAction("org.yi.Action"); bindService(service , conn , Context.BIND_AUTO_CREATE); } });6:conn接口对象中的onServiceConnected方法中取得IMyBnder对象并调用start方法,代码如下
private ServiceConnection conn = new ServiceConnection() { private IMyBinder mBinder; @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { //取得IMyBinder对象 mBinder = IMyBinder.Stub.asInterface(service); try { mBinder.start(); } catch(RemoteException e) { e.printStackTrace(); } } };大功告成,先运行app1来启动服务,然后在app2中点击按钮调用app1中service的方法,结果如下
这里的调用比较复杂需要在2个app中来回写方法,我会把这次的源代码上传到我的上传(名字为博客标题),有需要的可以去下载。Service基本就说到这,下次我为大家介绍安卓第三大组件BroadCastReceiver(广播机制)
相关文章推荐
- 安卓四大组件之二#1-Service的创建,生命周期以及动态调用Service里的方法 推荐
- Android应用程序四大组件之使用AIDL如何实现跨进程调用Service
- Android四大组件应用系列5——使用AIDL实现跨进程调用Service
- Android应用程序四大组件之使用AIDL如何实现跨进程调用Service
- 安卓使用aidl绑定远程Service并调用其方法
- 安卓Service组件使用系列4:绑定service并调用service中的方法返回结果
- Android 四大组件之(2)Service实现原理以及AIDL语言的使用详解
- Android 四大组件 Service实现原理以及AIDL语言的使用详解
- Struts2.5使用通配符的方式实现动态方法调用报错
- struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!
- 其他组件通过Binder直接调用Service中方法
- 安卓APP测试之使用Burp Suite实现HTTPS抓包方法
- 使用COM或者OLE的方法调用来控制Excel或者其他Office组件
- Replugin插件化技术解读之插件四大组件调用原理-Service(二)
- 四大组件之service简单介绍和AIDL的简单使用
- Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
- 使用aidl隐式调用service出现service intent must be explicit 问题的一种解决方法
- android四大组件之Service 模仿支付功能(AIDL使用)
- 使用Pmcmd远程调用Informatica技术实现方法
- 安卓四大组件之一#2-一使用Intent显式意图实现界面跳转以及数据传递