zoukankan      html  css  js  c++  java
  • 本地应用调用远程服务中的方法


    *  AIDL:安卓接口定义语言 ,来公开服务的接口的方式来暴露服务接口
    * IPC:进程间通讯 intel-process communication
    * AIDL编写步骤:
    远程工程
      1. 把IRemoteService.java接口改成.aidl的接口
      2. 去掉.aidl接口文件的权限修饰符public
      3. 让远程服务里的内部类继承Stub


    package com.example.alipay;
    import android.app.Service;
    import android.content.Intent;
    import android.os.IBinder;
    import com.example.alipay.IAliPayService.Stub;
    public class AliPayService extends Service{
       @Override
       public IBinder onBind(Intent intent) {
          return new XiaoMa();
       }
       private class XiaoMa extends Stub{
          @Override
          public  int pay(String name, String pwd, float money, long time) {
             System.out.println("用户名:"+name);
             System.out.println("密码:"+pwd);
             if (!"翠花".equals(name) || !"123".equals(pwd)) {
                return 300;
             }       
             System.out.println("查询账户余额是否充足");
             if (1000 <= money) {
                return 400;
             }       
             System.out.println("我是支付宝里的方法:"+money);
             return 200;
          }    
       }
    }

    把IRemoteService.java接口改成.aidl的接口
    去掉.aidl接口文件的权限修饰符public
    package com.example.alipay;
    interface IAliPayService {
       /**
        * 支付宝支付的方法
        * 
        * @param name
        *            用户名
        * @param pwd
        *            密码
        * @param money
        *            支付金额
        * @param time
        *            时间戳
        * 返回值:
             500:支付宝的错误
             400:用余额不足
             300:密码或者账号错误
             200:支付成功
             100:时间又问题
        */
       int pay(String name, String pwd, float money, long time);
    
    }

            本地工程
                4. 创建和远程工程里远程服务组件所在的包名一样的包
                5. 把远程工程里的.aidl文件复制到这个包里
                6. 在连接成功后,Stub.asInterface(service)
                7. 用强转后的对象间接调用远程服务里的方法
    
    package com.example.game; import com.example.alipay.IAliPayService; import com.example.alipay.IAliPayService.Stub; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; import android.view.View; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定远程服务 Intent intent = new Intent(); intent.setAction("com.example.alipay.AliPayService.PAY"); bindService(intent, new PayConn(), BIND_AUTO_CREATE); } public void dian(View v){ try { int code = mService.pay("翠花", "123",1, System.currentTimeMillis()); if (code == 200) { Toast.makeText(this, "亲爱的,支付成功", 0).show(); }else if(code == 300){ Toast.makeText(this, "亲,请输入正确的账号或者密码", 0).show(); }else if (code == 400) { Toast.makeText(this, "亲,金额不足", 0).show(); }else if (code == 100) { Toast.makeText(this, "请5分钟后重新支付", 0).show(); } } catch (RemoteException e) { e.printStackTrace(); } } private IAliPayService mService; /** * activity和service的连接通道 */ private class PayConn implements ServiceConnection { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = Stub.asInterface(service); } } }

    package com.example.alipay;
    interface IAliPayService {
       /**
        * 支付宝支付的方法
        * 
        * @param name
        *            用户名
        * @param pwd
        *            密码
        * @param money
        *            支付金额
        * @param time
        *           时间戳
        * 返回值:
             500:支付宝的错误
             400:用余额不足
             300:密码或者账号错误
             200:支付成功
             100:时间又问题
        */
       int pay(String name, String pwd, float money, long time);
    }
    
  • 相关阅读:
    [51nod 1135] 原根
    [CF1303F] Number of Components
    [CF1303E] Erase Subsequences
    [CF1303D] Fill The Bag
    子域名收集的一些姿势
    使用phpstorm+wamp实现php代码实时调试审计
    XSS小游戏通关Writeup
    Exif xss
    xss的一个tip
    应急响应
  • 原文地址:https://www.cnblogs.com/loaderman/p/6416290.html
Copyright © 2011-2022 走看看