aidl远程服务调用Android

demo1:

Alipay 支付App服务:

1.新建: Alipay\app\src\main\aidl\com\glsite\alipay\IAlipayService.aidl

// IAlipayService.aidl
package com.glsite.alipay;// Declare any non-default types here with import statementsinterface IAlipayService {// 调用支付的远程接口int callSafePay(String username, String password, float money, long timestamp);
}

1.1

main下新建:aidl

1.2

新建包:com.glsite.alipay  与java文件中包名一致

1.3

新建远程服务类

1.4 构建

1.4.1 构建报错:

Process 'command 'F:\Android\SDK\build-tools\29.0.0\aidl.exe'' finished with non-zero exit value -1073741819

不要用29.0.0 这是谷歌挖的坑,直接注释或改成 28.0.3;

解决:

app\build.gradle

注释这一行:

或 修改版本:

1.4.2 重新构建

2.Alipay\app\src\main\java\com\glsite\alipay\

AlipayService

package com.glsite.alipay;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;public class AlipayService extends Service {public AlipayService() {}private class MyBinder extends IAlipayService.Stub {@Overridepublic int callSafePay(String username, String password, float money, long timestamp) throws RemoteException {return safePay(username, password, money, timestamp);}}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.return new MyBinder();}@Overridepublic void onCreate() {System.out.println("onCreate");super.onCreate();}@Overridepublic void onDestroy() {System.out.println("onDestroy");super.onDestroy();}/*** 安全支付的服务方法** @param username*          用户名* @param password*          密码* @param money*          钱* @param timestamp*          时间戳* @return 结果码*/public int safePay(String username, String password, float money, long timestamp) {System.out.println("加密的username");System.out.println("加密的password");System.out.println("提交数据到支付宝的服务器");if (money > 5000) {return 505;// 支付超过了当日限额}if ("zhangsan".equals(username) && "123".equals(password)) {return 200;} else {return 300;}}
}

3.Alipay\app\src\main\java\com\glsite\alipay\

MainActivity

package com.glsite.alipay;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

4.AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.glsite.alipay"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><serviceandroid:name=".AlipayService"android:enabled="true"android:exported="true"><intent-filter><action android:name="com.glsite.alipay"/></intent-filter></service><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

demo2:

Fish

调取service的服务:

1.

需要第一个demo的整个IAlipayService.aidl文件包括文件夹路径,直接拷贝过来 Alipay\app\src\main\aidl\com\glsite\alipay\IAlipayService.aidl

aidl\com\glsite\alipay\IAlipayService.aidl 拷贝;

2.MainActivity

package com.glsite.fish;import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.os.RemoteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;import com.glsite.alipay.IAlipayService;public class MainActivity extends AppCompatActivity {private IAlipayService mIService;private MyConn mConn = null;private class MyConn implements ServiceConnection {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {System.out.println("成功绑定到远程alipay服务上");mIService = IAlipayService.Stub.asInterface(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = new Intent();intent.setAction("com.glsite.alipay");// 远程调用服务在安卓8.0系统及以上,也需要指定组件名,也就是显式调用intent.setComponent(new ComponentName("com.glsite.alipay", "com.glsite.alipay.AlipayService"));mConn = new MyConn();// 不要忘记newbindService(intent, mConn, BIND_AUTO_CREATE);}/*** 调用远程服务的方法,支付2元* @param view*/public void click(View view) {try {int resultCode = mIService.callSafePay("zhangsan", "123", 8000.00f, System.currentTimeMillis());switch (resultCode) {case 200:Toast.makeText(this,"支付成功", Toast.LENGTH_SHORT).show();break;case 404:Toast.makeText(this,"银行卡余额不足", Toast.LENGTH_SHORT).show();break;case 300:Toast.makeText(this,"用户名或密码错误", Toast.LENGTH_SHORT).show();break;case 505:Toast.makeText(this,"超过今日限额", Toast.LENGTH_SHORT).show();break;default:break;}} catch (RemoteException e) {e.printStackTrace();}}
}

4.AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.glsite.fish"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

aidl远程服务调用Android,报错:Process 'command 'F:\Android\SDK\build-tools\29.0.0\aidl.exe''相关推荐

  1. android sdk platform-tools 19.0.1,如何强制Android Studio 0.6.0使用SDK Build Tools 19.1.0

    我刚刚更新我的Android Studio到0.6.0,并更新SDK Build Tools到19.1.0,但我得到这个错误: The SDK Build Tools revision (19.0.3 ...

  2. 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )

    文章目录 一. 报错信息 二. 问题分析 三. 解决方案 一. 报错信息 Flutter 使用 image_picker 时 , 需要进行 AndroidX 兼容 , 设置了 Android 编译 S ...

  3. linux android build tools,build.gradle 文件中的 Android SDK Build Tools version

    build.gradle 文件中的 Android SDK Build Tools version Android,Gradle,SDK 2018.07.17 在 Android Gradle Plu ...

  4. stata15无法识别调用plus外部命令,报错:command XXX is unrecognized如何解决?

    stata15无法识别调用plus外部命令,报错:command XXX is unrecognized 如何解决? 解决办法: 查看stata文件夹下是否有profile.do文件: 如果有,可能是 ...

  5. java exec执行tar_用java调用rpmbuild 报错,同一条命令直接复制到终端却能运行

    用java调用rpmbuild 报错,同一条命令直接复制到终端却能运行. 命令如下: rpmbuild --define "_topdir /var/lib/jenkins/workspac ...

  6. python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call

    python调用dll报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong call ...

  7. Android报错——connect failed: EHOSTUNREACH (No route to host)

    2019独角兽企业重金招聘Python工程师标准>>> Android报错--connect failed: EHOSTUNREACH (No route to host) 没有路由 ...

  8. 调用torchtext报错OSError: libtorch_cpu.so: cannot open shared object file: No such file or directory

    环境 torch版本1.4.0 报错 报错信息如题.调用torchtext报错 OSError: libtorch_cpu.so: cannot open shared object file: No ...

  9. c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决

    c#调用excel报错 (异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT))问题的解决 参考文章: (1)c#调用excel报错 (异常来自 HRESULT:0x ...

最新文章

  1. 漫谈云计算、虚拟化、容器化--云平台技术栈05
  2. gitlab数据迁移
  3. hyper-v创建虚拟服务器,使用 Hyper-V 创建虚拟机
  4. poj 2247 Humble Numbers
  5. 在pytorch中自定义dataset读取数据2021-1-8学习笔记
  6. 补作业:随机生成二元四则运算
  7. java流与文件——正则表达式
  8. 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)
  9. “数说”——数据的三重身份
  10. 监督学习 | 集成学习 之AdaBoost、梯度提升及Slearn实现
  11. 交换机命令行配置与VLAN
  12. 分享Qt的面试题目(或许未来的我能用的上呢)_vortex_新浪博客
  13. rocketmq源码调试
  14. 风格迁移篇----艺术风格转换的内容与风格解构
  15. softmax 激活函数
  16. android国家代码/国际电话区号选择器
  17. 负反馈放大器电路详解
  18. 还在为产品的客户服务而烦恼?来搭建在线客服中心!
  19. 隆重推荐几本幼儿教育的书籍
  20. 用c语言,制作一个心形彩色告白图案(附源码)

热门文章

  1. 一个生成验证码的Jsp页面
  2. BSOD 又见BSOD。。。。
  3. 线程安全问题的本质详解: 原子性、有序性、可见性
  4. java中double类型显示两个小数,比如12.00
  5. 使用Python将数据插入数据库(一)
  6. 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
  7. acm steps chapter2总结
  8. Zabbix 使用微信接收报警信息
  9. Excel的裁剪(trimming)(トリミング)功能使用介绍
  10. linux ftp 150 无响应,FTP遇到150无响应