Android远程服务(AIDL)实现步骤

分享到:

 

AIDL是安卓接口定义语言的缩写

由于笔者使用的是android studio所以建立AIDL文件的位置也需要注意,要在APPNAME->main->aidl->packagename目录下,否则无法自动生成接口类文件

首先,编写我们的AIDL文件,定义接口方法,语法与JAVA略有不同

其次,我们要在建立的service类中建立实现了该AIDL文件名.stub类的子类,实现继承的方法。

在onbind方法中返回这个子类的一个实例

注册该服务,并给其一个ACTION,此ACTION就是以后访问该服务的ID

 

在ACTIVITY中,通过INTENT设立ACTION以及bindService的方法来启动该服务,需要注意的是,Android5.0中service的intent一定要显性声明,所以我们要给INTENT设置上我们现在的包名,使用上下文的GETPACKAGENAME即可,并建立一个ServiceConnection实例,实现该实例的方法,在onServiceConnected方法中可以通过其参数service来获得service传回的子类实例。

通过该实例,我们就可以调用服务中子类实例的方法了。

 

上面就是AIDL服务的建立和使用的简易教程

Activity

public class aidlactivity extends Activity{
    private IMyAidlInterface mys = null;

    public ServiceConnection sc = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mys = IMyAidlInterface.Stub.asInterface(service);
            if(mys != null) {
                try {
                    Toast.makeText(aidlactivity.this, mys.getvalue(), Toast.LENGTH_LONG).show();
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
                Log.v("sk", "not null");
            }


        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent();
        intent.setAction("com.xl.aild.myaidl");
        intent.setPackage(this.getPackageName());
        bindService(intent, sc, Context.BIND_AUTO_CREATE);
    }
}

昵    称:
验证码:

相关文档: