AIDL的使用
来源:互联网 发布:rf1800软件下载 编辑:程序博客网 时间:2024/06/14 05:59
什么是AIDL
aidl的全称是Android Interface Definition Language,这是为了实现跨进程通信而在客户端和服务端编写的接口。
定义aidl文件
package com.geo.im.service;import com.geo.bean.PersonalInfo;import com.geo.bean.GRoomInfo;interface CommunicationAIDL{ //登录 boolean startLogin(); //注册 boolean startRegister(String name,String paswd); //添加朋友 boolean addFriend(String name,String nick); //同意好友请求 boolean confirmFriendRequest(String username); //删除朋友 boolean deleteFriend(); //添加分组 boolean addGroup(); //退出 boolean exit(); //清除登录状态 void clearLoginState(); //发送消息 boolean sendMessage(String user,String content); //获取好友列表 List<PersonalInfo> getFriends(); //创建会议室 void createConferenceRoom(String roomName); //加入会议室 void joinConferenceRoomChat(String username,String password,String roomname); //查询会议室成员名称 void queryConferenceRoomUsers(String roomname); //获取服务器上所有会议室 List<GRoomInfo> getConferenceRooms(); }
在Service中创建Binder类
private class CommnuicationServer extends CommunicationAIDL.Stub {@Overridepublic boolean startLogin() throws RemoteException {// 开始登录mXppManager.startLoginTask();return isLoginSucced;}@Overridepublic boolean startRegister(String name, String password)throws RemoteException {if (mXppManager.isConnected()) {return mXppManager.getAccountGeoManager().register(name,password);}// 注册return false;}@Overridepublic boolean addFriend(String user, String nick)throws RemoteException {// 添加朋友return mXppManager.getAccountGeoManager().addFriends(user, nick,null);}@Overridepublic boolean deleteFriend() throws RemoteException {// 删除朋友return false;}@Overridepublic boolean addGroup() throws RemoteException {// 添加分组return false;}@Overridepublic boolean exit() throws RemoteException {// 退出系统return false;} ............................... }
在Service中创建那个CommunicationServer对象,并在onBinder()方法中返回。
创建ServerviceConnection对象并bindService
protected ServiceConnection mConnection = new ServiceConnection() {public void onServiceConnected(ComponentName className, IBinder service) {mServiceConnection = CommunicationAIDL.Stub.asInterface(service);}public void onServiceDisconnected(ComponentName className) {mServiceConnection = null;}};注意mServiceConnection是一个CommunicationAIDL的实例,通过此实例就可以操作定义在aidl中的各种方法了,也就是在Service中由CommnuicationServer实现的方法,从而达到与Service通信的目的。绑定Service如下:
Intent intent = new Intent();intent.putExtra("data", "Hello AIDL");intent = new Intent();intent.setClass(mContext, ConnectionService.class);mContext.bindService(intent, mConnection, 1);
需要注意的是,aidl文件中只能传递基本类型、String类型的数据,如果要传递自己定义的实例对象数据,则需要实现Parcelable接口并且在aidl文件中声明,如下例子,一个PersonInfo类就实现了Parcelable接口:
public PersonalInfo(String ujid, String password, String username,String extend, int online) {this.ujid = ujid;this.username = username;this.password = password;this.extend = extend;this.online = online;}private PersonalInfo(Parcel in) {this.ujid = in.readString();this.username = in.readString();this.password = in.readString();this.extend = in.readString();this.online = in.readInt();}public static final Parcelable.Creator<PersonalInfo> CREATOR = new Parcelable.Creator<PersonalInfo>() {public PersonalInfo createFromParcel(Parcel in) {return new PersonalInfo(in);}public PersonalInfo[] newArray(int size) {return new PersonalInfo[size];}};@Overridepublic void writeToParcel(Parcel out, int flags) {out.writeString(ujid);out.writeString(username);out.writeString(password);out.writeString(extend);out.writeInt(online);}主要就是通过writeToParcel写入,通过CREATOR读取数据,然后定义完实体类后需要新建一个和实体类同名的aidl文件,比如上述实体类叫做PersonalInfo.java,那么久需要在同包下建一个PersonalInfo.aidl文件,该文件内容如下:
package com.geo.bean;parcelable PersonalInfo;
其实就是一个package和一个parcelable的申明,这样就可以了,然后我们去服务的aidl中就可以传递此PersonalInfo实体类了,正如我们上面的CommunicationAIDL文件中的List<PersonalInfo> getFriends(); 方法,需要先import com.geo.bean.PersonalInfo;进来,如此即可。
1 0
- AIDL的使用
- android aidl的使用
- Android AIDL的使用
- android AIDL的使用
- AIDL的简单使用
- AIDL的使用
- AIDL Service 的使用
- AIDL的使用
- aidl的简单使用
- AIDL的使用
- aidl的使用简介
- 简单明了的AIDL使用
- 浅析AIDL的使用
- AIDL的使用
- AIDL的使用
- AIDL的使用步骤
- AIDL简单的使用
- AIDL的简单使用
- 接口文档当中,英文字母代表的含义
- 查看线程CPU占用情况
- Fast-RCNN安装与使用(跑demo)
- enum枚举类型详解
- 手把手教你使用Git
- AIDL的使用
- Java之基于Eclipse搭建SSH框架(上)
- SpringMVC定义Interceptor
- 电气配件管理系统总结
- CentOS之更新
- Android:AIDL进程之间的通信
- Android与html5交互 -- WebView使用(一)
- json与javaBean的序列化与反序列化(待续...)
- schema.xml文件配置