关于Android IDL的知识 可阅读《Google Android 揭秘》的P104页,也可参见ApiDemos中的代码
其他的不说,直接上代码。
1.先写一个.aidl远程接口
package com.originatechina; //定义包interface ISimpleMathService { //声明接口名称 int add(int a, int b); //描述方法 }在eclipse 它会自动在gen文件夹对应的包下生成ISimpleMathService.java文件
2.公开远程接口
package com.originatechina;//导入相应的包public class SimpleMathService extends Service { // 实现远程接口 private final ISimpleMathService.Stub binder = new ISimpleMathService.Stub() { @Override public int add(int a, int b) throws RemoteException { return a + b; } }; @Override public IBinder onBind(Intent intent) { return this.binder; // 返回一个表示远程接口的对象 IBinder }}3.绑定到服务
package com.originatechina;//导入相应的包public class MainActivity extends Activity { private ISimpleMathService service; // 定义远程接口类型变量 private boolean bound; // 定义表示绑定状态的布尔变量 private Button addButton; //请先在布局文件中添加一个按钮组件 private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder iservice) { service = ISimpleMathService.Stub.asInterface(iservice); bound = true; } @Override public void onServiceDisconnected(ComponentName name) { service = null; bound = false; } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); addButton = (Button) findViewById(R.id.add_btn); // 省略获取View部分 addButton.setOnClickListener(listener); } private OnClickListener listener = new OnClickListener(){ @Override public void onClick(View v) { int a = 10; int b = 20;//省略从布局中获取字符串 并转换为int类型 //doBindService(); //不能置于此处,否则onServiceConnected()还来不及调用, //service为null,以下语句抛空指针异常 //可放在onCreate() 或者 onStart() 里面 try { int result = service.add(a, b); // 使用远程对象执行操作 Toast.makeText(MainActivity.this, "" + a + "+" + b + "=" + result, 2000).show(); } catch (RemoteException e) { e.printStackTrace(); } } }; @Override public void onStart() { super.onStart(); doBindService(); } @Override public void onStop() { super.onStop(); doUnbindService(); } void doBindService() { if(!bound) { bindService(new Intent(this, SimpleMathService.class), connection, Context.BIND_AUTO_CREATE); //建立绑定 } } void doUnbindService() { if(bound) { // 解除绑定 unbindService(connection); } }}4. 在AndroidManifest.xml中定义你的service
<service android:name=".SimpleMathService" />
?
然后运行即可。