据官方消息,从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;@Overrideprotected 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");}@Overrideprotected 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. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android 开机启动加速
  6. 将apk装入system/app
  7. Android(安卓)Studio生成aar、jar包及其使用
  8. Android(安卓)Apk反编译得到Java源代码(爱加密系列教程一)
  9. android使用AIDL实现跨进程通讯(IPC)

随机推荐

  1. 用 Opencv 和 Python 对狗狗做模糊检测
  2. python-条件语句练习
  3. Python执行系统命令:使用subprocess的Pope
  4. Python,Pandas删除Excel中的行
  5. Scrapy框架--Requests对象
  6. 使用python csv写入器,无需引用
  7. python之全栈开发——————IO模型
  8. Pycharm 运行跳一跳程序
  9. Python学习之Numpy基础(三)
  10. 我大学剩下一年半的生活(三)——pythonchal