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