android studio 中使用aidl

据官方消息,从2015年年底google不再支持eclipse adt 的更新,为了跟上大家的步伐,小编最近也在尝试使用android studio开发android,但是as有许多使用方式是跟eclipse是不同的,尤其是aidl的使用,这个问题困扰我半天。

一、首先是as中添加了可以直接新建aidl文件的功能,但是也有一点让人头疼的事就是:它不像eclipse一样只要刷新一下就可以在gen目录下自动生成.java文件,as中aidl文件是这样创建的:
1、通过右击app->new->aidl:
这里写图片描述
2、会在app下生成一个aidl文件(此时aidl下的包名一定要跟manifest.xml下的应用包名一致,默认是一致的):
这里写图片描述
3、接下来废话不多说,让大家看看我的源码:
MyAIDL.aidl

interface MyAIDL {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    boolean callMethod(int money);
}

MyService

public class MyService extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.i("aa","onBind");
        return new MyBinder();
    }

    @Override
    public void onCreate() {
        Log.i("aa","onCreate");
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        Log.i("aa","onDestroy");
        super.onDestroy();
    }

    public boolean method(int money){
        if(money > 5000){
            Log.i("aa","pay success");
            return true;
        }else{
            Log.i("aa","pay failed");
            return false;
        }
    }

    private class MyBinder extends MyAIDL.Stub {


        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {

        }

        @Override
        public boolean callMethod(int money) throws RemoteException {
            return method(money);
        }
    }
}

这样远程服务就完成了,我当时看了许多as中如何使用aidl的博客,好多就此结束了,有的虽然有使用aidl文件,但是没有清楚的将如何在另一个project中使用,下面关键的时候到了:
3、就是在第二个project中用上述(1)方法建立一个aidl文件,但是包名默认与当前项目的报名一致,而且无法修改(这个很蛋疼),于是我的办法就是在将默认的包删除(大家如果有更好的方法,欢迎分享出来),然后自己新建一个包,包名与之前第一个project包名(即包含远程service的project的包名)相同,这样直接将第一个project中的MyService.aidl文件拷贝到该包下即可(因为我的demo中用的名字是MyService.aidl)如图:
这里写图片描述
4、接下来便是第二个project中的代码了

“`
public class MainActivity extends Activity {

private MyAIDL myAIDL;
private MyConn conn;
private Intent service;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    service = new Intent();
    service.setAction("com.xiaohua.android.bb");
    service.setPackage("com.xiaohua.android.alipayservice");
}

@Override
protected void onDestroy() {
    unbindService(conn);
    super.onDestroy();
}

public void click(View v){
    switch (v.getId()){
        case R.id.start:
            startService(service);
            break;
        case R.id.bind:
            conn = new MyConn();
            bindService(service, conn,BIND_AUTO_CREATE);
            break;
        case R.id.call:
            try {
                if(myAIDL.callMethod(500)){
                    Toast.makeText(this, "支付成功", Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(this,"支付失败",Toast.LENGTH_LONG).show();
                }
            } catch (RemoteException e) {
                e.printStackTrace();
            }
            break;
    }
}

private class MyConn implements ServiceConnection {

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        myAIDL = MyAIDL.Stub.asInterface(service);
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值