一个AIDL的简单使用
2016-08-26 15:26
246 查看
使用过程中我们一般会分成2个模块,即client和server。
首先简单说下整个的流程
1、在服务端新建*.aidl文件
2、在服务端新建一个service,并实现aidl文件中的方法。
3、客户端绑定该service,获取服务对象调用aidl中定义的方法。
看下代码结构:
一、新建AIDL文件
MyAidl.aidl中的方法定义如下:
由于用到Person,所以我们需要再建一个aidl文件(如果aidl文件中用到的只是一些基本数据类型的话,这一步基本就结束了可以直接看第二步)
Person.aidl
之后继续建立Person.java文件,其中的get和set方法略去。。。
二、建立service
在服务端建立一个service,实现aidl中定义的那些方法
myservice.java
最后,不要忘了在AndroidManifest.xml注册这个service
三、客户端的绑定和调用
整个例子并没有实际意义,仅作为学习参考使用
首先简单说下整个的流程
1、在服务端新建*.aidl文件
2、在服务端新建一个service,并实现aidl文件中的方法。
3、客户端绑定该service,获取服务对象调用aidl中定义的方法。
看下代码结构:
一、新建AIDL文件
MyAidl.aidl中的方法定义如下:
package com.kong.aidl; import com.kong.aidl.Person; interface MyAidl { String getValue(); Person cal(String name,int age); }
由于用到Person,所以我们需要再建一个aidl文件(如果aidl文件中用到的只是一些基本数据类型的话,这一步基本就结束了可以直接看第二步)
Person.aidl
package com.kong.aidl; parcelable Person;
之后继续建立Person.java文件,其中的get和set方法略去。。。
public class Person implements Parcelable{ private String name; private int age; @Override public int describeContents() { // TODO Auto-generated method stub return 0; } public Person(String name, int age) { this.name = name; this.age = age; } public Person(Parcel source) { readFromParcel(source); } @Override public void writeToParcel(Parcel dest, int flags) { // TODO Auto-generated method stub dest.writeString(name); dest.writeInt(age); } public void readFromParcel(Parcel source) { name = source.readString(); age = source.readInt(); } public static final Parcelable.Creator<Person> CREATOR=new Creator<Person>() { @Override public Person[] newArray(int size) { // TODO Auto-generated method stub return new Person[size]; } @Override public Person createFromParcel(Parcel source) { // TODO Auto-generated method stub return new Person(source); } }; }
二、建立service
在服务端建立一个service,实现aidl中定义的那些方法
myservice.java
public class MyService extends Service { public class MyServiceImpl extends MyAidl.Stub { @Override public String getValue() throws RemoteException { return "Android......."; } @Override public Person cal(String name, int age) throws RemoteException { // TODO Auto-generated method stub Person p=new Person(name, age); return p; } } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return new MyServiceImpl(); } }
最后,不要忘了在AndroidManifest.xml注册这个service
<service android:name="com.kong.aidl.MyService" > <intent-filter> <action android:name="com.kong.aidl.MyAidl" /> </intent-filter> </service>
三、客户端的绑定和调用
public class AidlDemoActivity extends Activity implements OnClickListener { private MyAidl myService = null; private Button btnInvokeAIDLService; private Button btnBindAIDLService; private TextView textView; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { // 获得服务对象 myService = MyAidl.Stub.asInterface(service); btnInvokeAIDLService.setEnabled(true); } @Override public void onServiceDisconnected(ComponentName name) {} }; @Override public void onClick(View view) { switch (view.getId()) { case R.id.btnBindAIDLService: // 绑定AIDL服务 bindService(new Intent("com.kong.aidl.MyAidl"), serviceConnection, Context.BIND_AUTO_CREATE); break; case R.id.btnInvokeAIDLService: try { textView.setText(myService.cal("xiaoming", 12).getName()); } catch (Exception e) { } break; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService); btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService); btnInvokeAIDLService.setEnabled(false); textView = (TextView) findViewById(R.id.textview); btnInvokeAIDLService.setOnClickListener(this); btnBindAIDLService.setOnClickListener(this); } }
整个例子并没有实际意义,仅作为学习参考使用
相关文章推荐
- 一个简单的demo学习Android远程Service(AIDL的使用)
- 一个简单的demo学习Android远程Service(AIDL的使用)
- 一个简单的demo学习Android远程Service(AIDL的使用)
- 一个简单的demo学习Android远程Service(AIDL的使用
- 一个简单的demo学习Android远程Service(AIDL的使用)
- 使用C#开发一个简单的P2P应用
- 一个使用面向对象方式编写的简单游戏框架
- Linux下,使用C/C++编写的一个简单的信号处理例程
- 一个使用监听器模式实现的J2ME网络编程框架,包括一个简单的登录功能实现(含源代码)
- 我封装的一个ADO类,使用超简单!
- 不再使用自动编号了。自己写了一个Id生成器,超级简单
- 使用buffalo集成spring写的一个简单的登录子模块
- 使用C#开发一个简单的P2P应用
- 一个简单的邮件类[使用jmail组件发送]
- 提供一个简单查询工具,供加工贸易企业的财务使用
- Linux下,使用C/C++编写"静态链接库"的一个简单例子
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(1)Calendar概述
- 通过一个简单的SWING日历BEAN开发学习Calendar类的使用(2)JCalendar源代码
- 使用C#开发一个简单的P2P应用
- 一个使用spring的最简单的例子。