Android(进程通信)AIDL

    xiaoxiao2022-07-04  125

    AIDL

    在Android中进程通信 直接看代码  ,Dome要讲的是支付宝和淘宝进行支付通信

    第一步创建AIDL接口

    // IService.aidl package com.android.aidl; // Declare any non-default types here with import statements /** * * @param account 账号 * @param pwd 密码 * @param payPwd 支付密码 * @param money 支付金额 * @param currTimeMiles 当前的时间撮 * @return int * 代码错误 ----- -1 * 账号密码错误 ---0 * 支付密码错误 ---1 * 余额不足 ------2 * 支付成功 ------3 */ interface IService { int callSafePay(String account,String pwd,String payPwd, double money,long currTimeMiles); }

    第二步创建支付宝服务

    public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Intent intent) { return new MyBind(); } private class MyBind extends IService.Stub{ @Override public int callSafePay(String account, String pwd, String payPwd, double money, long currTimeMiles) throws RemoteException { return safePay(account,pwd,payPwd,money,currTimeMiles); } } /** * * @param account 账号 * @param pwd 密码 * @param payPwd 支付密码 * @param money 支付金额 * @param currTimeMiles 当前的时间撮 * @return int * 代码错误 ----- -1 * 账号密码错误 ---0 * 支付密码错误 ---1 * 余额不足 ------2 * 支付成功 ------3 */ private int safePay(String account,String pwd,String payPwd, double money,long currTimeMiles){ if(!account.equals("zhangsa")||!pwd.equals("123456")){ return 0; }if(!payPwd.equals("123456")){ return 1; } //如果支付的金额大于一千块就显示余额不足 if(money>1000){ return 2; } //如果上面的多不满足 说明支付成功 return 3; } }

     

     

    第三步给服务提供外部的一个Action去启动服务

    <service android:name="com.li.zhifubao.MyServicer"> <intent-filter > <action android:name="com.li.zhifubao.AlipayService.SAFEPAY"/> </intent-filter> </service>

     

     



    创建淘宝

    第一步,吧对应的支付宝的aidl文件复制到淘宝里面   , 包名类名要一致  重构项目

    第二部通过一个Intent启动服务使用BindService

     

    public void onClick(View view){ Log.v("liwangjiang","onClick"+getPackageName()); Intent intent = new Intent(); intent.setAction("com.li.zhifubao.AlipayService.SAFEPAY"); intent.setPackage("com.android.aidl"); bindService(intent, new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.v("liwangjiang","service"); IService bind = IService.Stub.asInterface(service); try { int id= bind.callSafePay("zhangsa","123456","123456",123,SystemClock.currentThreadTimeMillis()); switch (id) { case 0: Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "支付密码错误", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "余额不足", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_SHORT).show(); break; default: break; } } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } },BIND_AUTO_CREATE); }

     

    最新回复(0)