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);
    }
    
  • 相关阅读:
    mysql 获取字符串的长度
    mysql 字符类以及重复元字符
    mysql 字段拼接
    mysql 去除字符串中的空格
    mysql 正则表达式
    mysql 选出前五个元素
    mysql regexp 表达式
    mysql 选择所有同学名字
    mysql 获取数学成绩最高以及最低的同学
    mysql 获取单个科目的平均分
  • 原文地址:https://www.cnblogs.com/loaderman/p/6416290.html
Copyright © 2011-2022 走看看