当前位置: 代码迷 >> Android >> Android IDL 小事例
  详细解决方案

Android IDL 小事例

热度:96   发布时间:2016-05-01 15:46:47.0
Android IDL 小例子

关于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" />
?
然后运行即可。
  相关解决方案