AIDL

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

第一步创建AIDL接口

Android(进程通信)AIDL_android

// 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);
}