android aidl调用进程间服务的方法
来源:互联网 发布:淘宝商城女装童装 编辑:程序博客网 时间:2024/06/10 09:04
我就拿最近做的项目来说明了,首先创建一个IFMService.aidl的接口文件,在R.java的目录下会自动生成IFMService.java 的文件, 接口文件的内容如下:
package net.kindroid.fm;interface IFMService{/*** open FM*/boolean openFM();/*** close FM*/boolean closeFM();/*** whether FM is open*/boolean isOpen();/*** set a special frequency to the FM*/int setCurrentFrequency(in int frequency);/*** search FM tunes*/boolean searchStation(in int start,in int direction,in int timeout,in int reserve);/*** get current Frequency*/int getCurrentFrequency();/*** stop search FM*/boolean stopSearch();/*** set FM volume*/boolean setVolume(in int value);/*** get current Volume*/int getCurrentVolume();/*** set current mute mode*/int setMuteMode(in int mode);}
public class FMService extends Service:实现如下:
public class MyServiceimpl extends IFMService.Stub{WeakReference<FMService> mService;MyServiceimpl(FMService service){mService = new WeakReference<FMService>(service);}@Overridepublic boolean openFM() throws RemoteException{return mService.get().openFM();}@Overridepublic boolean closeFM() throws RemoteException{return mService.get().closeFM();}@Overridepublic boolean isOpen() throws RemoteException{return mService.get().isOpen();}@Overridepublic boolean searchStation(int start, int direction, int timeout, int reserve)
throws RemoteException{return mService.get().searchStation(start, direction, timeout, reserve);}@Overridepublic int getCurrentFrequency() throws RemoteException{return mService.get().getTunedFrequency();}@Overridepublic boolean stopSearch() throws RemoteException{return mService.get().stopSearch();}@Overridepublic boolean setVolume(int value) throws RemoteException{return mService.get().setVolume(value);}@Overridepublic int getCurrentVolume() throws RemoteException{return mService.get().getCurrentVolume();}@Overridepublic int setMuteMode(int mode) throws RemoteException{return mService.get().setMuteMode(mode);}@Overridepublic int setCurrentFrequency(int frequency) throws RemoteException{return mService.get().setCurrentFrequency(frequency);}}
在service里面实现get().的那些方法即可在当前app里面使用这个service了
那么如何在其他app里面使用到这个service呢?
在要使用上面服务的那个app的src目录下面新建一个目录树,要和IFMService的package相对应,比如本例的net.kindroid.fm,然后把生成后的IFMService.java文件拷贝到新建的这个目录树下面,那么在代码里面就可以使用了:
mContext.startService(new Intent("net.kindroid.aidl.service.IFMService"));mContext.bindService(new Intent("net.kindroid.aidl.service.IFMService"),serviceConnection, Context.BIND_AUTO_CREATE);
使用的方法和service的那个app类似,就可以调用我们刚刚写的那个service了,还是贴上使用的方法吧:
if (mFMService == null){try{// start serverthis.startService(new Intent("net.kindroid.aidl.service.IFMService"));bindService(new Intent("net.kindroid.aidl.service.IFMService"),
serviceConnection, Context.BIND_AUTO_CREATE);} catch (Exception e){}}
/*** fm service*/private IFMService mFMService = null;
/*** fm service connection*/private ServiceConnection serviceConnection = new ServiceConnection(){@Overridepublic void onServiceDisconnected(ComponentName name){mFMService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service){mFMService = IFMService.Stub.asInterface(service);if (hasData()){SharedPreferences settings = getSharedPreferences(FMRADIO_DATA, 0);int current = settings.getInt(CHANNEL_VALUE, 1017);if (digitView != null){try{if (mFMService != null && !mFMService.isOpen()){if (!FMService.isMusicVolumeFocus && !isCallState()){mFMService.openFM();play.setBackgroundResource(R.drawable.stop);setEnabled(true);setChannelToPlay(current);setVolume();} else{digitView.setChannel(current);updateRedLine(current);}} else{digitView.setChannel(current);updateRedLine(current);}} catch (Exception e){}}}}};
这样就实现了进程间的服务通讯了,具体的底层机制呢,大家研究一下binder机制吧,呵呵
- android aidl调用进程间服务的方法
- android 不同进程间的调用 AIDL 实现通讯服务
- android,aidl,绑定远程服务,调用远程服务的方法
- android 学习笔记9-服务 启动停止 调用服务方法 远程服务 AIDL进程通信
- Android -- service的开启方式, start开启和绑定开启服务,调用服务的的方法, aidl调用远程服务
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(其)关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(二):关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- Android服务之Service 关于AIDL进程间通信
- Android服务之Service(其二)关于AIDL进程间通信
- android进程间通信(远程服务aidl,服务端)
- document对象属性与方法
- 微信4.0 米聊 陌陌横向对比评测
- asp.net中的Application概述
- 帖子配图自己专用2
- A sample Hamilton path hdu 3583
- android aidl调用进程间服务的方法
- SQL 单表多条记录分组查询分页代码
- window对象的属性与方法
- 常用的System.getProperty()
- 关于J2EE
- POCO库中文编程参考指南(9)Poco::Net::DNS
- Oracle之Trigger学习
- AO,AE,ADF 总结
- Linux 硬盘自读原因调查