Android AIDL使用步骤

最近项目中用到蓝牙打电话,需要调用AIDL实现,说实话,AIDL之前没有用过,其实不太会,于是网上搜索哈,算是知道怎么用了,具体实现原理还是不太懂,反正知道怎么用了。

原理:就是A程序定义一个AIDL文件,eclipse会自动编译生成class文件,然后在A程序的service里面实现AIDL接口,并且实现AIDL的方法,方法就是你要做什么的,比如打电话的….然后在B项目里面绑定A项目的service,然后就可以调用A项目service里面的方法了。其实就是不同进程之间的方法调用。

写个小DEMO:
实现步骤:
1,A程序定义AIDL叫Test,定义一个dosomething();



interface Test{
void dosomething();
}

2,A程序定义Service,实例化AIDL的接口,并且实现其方法,在onBind()返回实例化的AIDL;

public class Myservice extends Service {

    // 初始化AIDL实现其方法,做某些事件
    Test.Stub mStub = new Test.Stub() {

        public void dosomething() throws android.os.RemoteException {
            // AIDL的方法,做某些事件

        };

    };

    @Override
    public IBinder onBind(Intent intent) {

        return (IBinder) mStub;// 该service绑定AIDL
    }

}

3,也要将A程序定义好的AIDL copy到B项目;这里省略;**

4,B项目连接Service;

/**
     * 链接service
     */
    private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            mTest = null;
        }

        @Override
        public void onServiceConnected(ComponentName arg0, IBinder arg1) {
            mTest = Test.Stub.asInterface(arg1);
                if (mTest == null) {
                Toast.makeText(mContext, "bind service failed",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(mContext, "bind service sucess",
                        Toast.LENGTH_SHORT).show();
            }
        }
    };

5,B项目绑定Service;

// 绑定AIDL服务,两种方法
第一种代码直接启动service的方式绑定:

            Intent intent = new Intent(MainActivity.this, Test.class);
            bindService(intent, connection, Context.BIND_AUTO_CREATE);//绑定
            startService(intent);//启动service

第二种在A项目的AndroidManifest.xml的Myservice 设置Action启动,根据Action启动对应的service
        A项目:
           <service android:name="com.test.Myservice"
            android:process=":remote" >
            <intent-filter>
                <action android:name="**com.action.aidl**" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        B项目绑定sevice:
        Intent intent = new Intent("**com.action.aidl**");
        bindService(intent, connection, Context.BIND_AUTO_CREATE);

        总之以上2种都是为了启动service,在service的onbind()方法里面绑定aidl,返回一个aidl
            public IBinder onBind(Intent intent) {

        return (IBinder) mStub;// 该service绑定AIDL
    }

6,B项目调用A项目的dosomething()方法

// 调用AIDL的方法
            mTest.dosomething();

还有一个很重要的一点,是A,B个项目存放AIDL的包名一定要相同,否则绑定AIDL成功,也吊不到对方的方法。

总结:ADIL就是两个不同的程序之间的一个桥梁,两个不同的程序通过绑定AIDL可以互相通讯。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值