android 联接外部服务

android 连接外部服务CountServicepackage com.jf.lromateserviceimport android.app.Serviceimport and

android 连接外部服务

CountService

package com.jf.lromateservice;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;/** * 如果之间需要传递参数或者方法调用。需要使用bind和unbind方法。 * 具体做法是,服务类需要增加接口,比如ICountService, * 另外,服务类需要有一个内部类,这样可以方便访问外部类的封装数据, *  这个内部类需要继承Binder类并实现ICountService接口。 * 还有,就是要实现Service的onBind方法,不能只传回一个null了。 *  * @author  *  */public class CountService extends Service {private boolean threadDisable;    private int count;     private ICountService.Stub serviceBinder=new ICountService.Stub() {@Overridepublic int getCount() throws RemoteException {// TODO Auto-generated method stubreturn count;}};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn serviceBinder;}@Override    public void onCreate() {        super .onCreate();        new Thread( new Runnable() {            @Override            public void run() {                while ( ! threadDisable) {                    try {                        Thread.sleep( 1000 );                    } catch (InterruptedException e) {                    }                    count ++ ;                    Log.v( " CountService " , " Count is " + count);                    System.out.println(" CountService  Count is---> " + count);                }            }        }).start();    }    @Override    public void onDestroy() {        super .onDestroy();        this .threadDisable = true ;        Log.v( " CountService " , " on destroy " );    }} 

?

RomateActivity远程服务连接activity

package com.jf.lromateservice;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.os.RemoteException;import android.util.Log;/** * activity和远程服务直接的通信 * @author * */public class RomateActivity extends Activity {    /** Called when the activity is first created. *//** * aidl接口文件 */private ICountService iCountService;/** * 连接服务内部类 */private ServiceConnection serviceConnection=new ServiceConnection() {/** * 断开连接 */@Overridepublic void onServiceDisconnected(ComponentName name) {// TODO Auto-generated method stubiCountService=null;}/** * 连接上了 */@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {// TODO Auto-generated method stubiCountService=(ICountService)service;try {            Log.v( " CountService " , " on serivce connected, count is "                     + iCountService.getCount());            System.out.println(" CountService  on serivce connected, count is "                     + iCountService.getCount());        } catch (RemoteException e) {        System.out.println("捕捉异常------------》");            throw new RuntimeException(e);        }}};/** * 初始化 */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        System.out.println("begin");        /**         * 连接远程service         * 绑定远程服务的intent 是aidl 而不是service         */        this.bindService(new Intent("com.jf.lromateservice.ICountService"),         serviceConnection, BIND_AUTO_CREATE);    }@Overrideprotected void onDestroy() {// TODO Auto-generated method stub//this.unbindService(serviceConnection);super.onDestroy();}    }

?aidl

package com.jf.lromateservice;interface ICountService {    int getCount();} 

?