成功绑定服务且调用服务方法但无法从方法启动PayActivity
下面是Alipay中PayService的代码
public class PayService extends Service {
private static final String TAG = "PayService";
private ThirdPartPlayImpl mThirdPartPlay;
public PayService() {
}
@Override
public IBinder onBind(Intent intent) {
String action = intent.getAction();
Log.d(TAG, "onBind....action-->" + action);
if (action != null && action.equals("alipay.com.THIRD_PART_PAY")) {
//说明这个为第三方应用要求我们进入支付界面
mThirdPartPlay = new ThirdPartPlayImpl();
return mThirdPartPlay;
}
return new PayAction();
}
public class PayAction extends Binder{
public void Pay(float payMoney){
Log.d(TAG,"pay money is " + payMoney);
//支付的方法
if (mThirdPartPlay != null){
mThirdPartPlay.paySuccess();
}
}
public void onUserCancel(){
//用户点击界面上取消
if (mThirdPartPlay != null){
mThirdPartPlay.payFailed(1, "user cancel pay");
}
}
}
private class ThirdPartPlayImpl extends ThirdPartPayAction.Stub{
private ThirdPartPayResult mCallback;
@Override
public void requestPay(String orderInfo, float money, ThirdPartPayResult callback) {
Log.d(TAG,"requestPay....");
this.mCallback = callback;
//第三方应用发起请求,打开一个支付界面
Intent intent = new Intent();
intent.setClass(PayService.this, PayActivity.class);
intent.putExtra(Constants.KEY_BILL_INFO, orderInfo);
intent.putExtra(Constants.KEY_PAY_MONEY, money);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Log.d(TAG,"requestPay0....");
}
public void paySuccess(){
try {
mCallback.onPaySuccess();
} catch (RemoteException e) {
e.printStackTrace();
}
}
public void payFailed(int errorCode, String errorMsg){
try {
mCallback.onPayFailed(errorCode, errorMsg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
- 程序员拉大锯android基础系列P7之模拟支付宝支付第三方应用成功绑定服务且调用服务方法但无法从方法启动PayActivity
- 下面是第三方应用的代码
public class MainActivity extends AppCompatActivity {
private boolean mIsBindAlipay;
private AlipayConnection alipayConnection;
private static final String TAG = "MainActivity";
private Button mRechargeBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bindAlipayService();
initView();
setListener();
}
private void setListener() {
mRechargeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//进行充值
try {
if (mThirdPartPayAction != null) {
mThirdPartPayAction.requestPay("充值100积分", 100f, new PayCallback());
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
});
}
private class PayCallback extends ThirdPartPayResult.Stub {
@Override
public void onPaySuccess() {
Toast.makeText(MainActivity.this, "充值成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onPayFailed(int errorCode, String msg) {
Log.d(TAG, "errorCode---->" + errorCode + "errorMsg--->" + msg);
Toast.makeText(MainActivity.this, "充值失败", Toast.LENGTH_SHORT).show();
}
}
private ThirdPartPayAction mThirdPartPayAction;
private class AlipayConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.d(TAG, "onAlipayServiceConnected........." + service);
mThirdPartPayAction = ThirdPartPayAction.Stub.asInterface(service);
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.d(TAG, "onAlipayServiceDisconnected........." + name);
}
}
private void initView() {
mRechargeBtn = (Button) this.findViewById(R.id.button);
}
/**
* 绑定Alipay的服务
*/
private void bindAlipayService() {
Intent intent = new Intent();
intent.setAction("alipay.com.THIRD_PART_PAY");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage("alipay.com");
alipayConnection = new AlipayConnection();
mIsBindAlipay = bindService(intent, alipayConnection, BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mIsBindAlipay && alipayConnection != null) {
unbindService(alipayConnection);
Log.d(TAG, "unbindAlipayService........");
alipayConnection = null;
mIsBindAlipay = false;
}
}
}
- 下面是第三方应用点击充值后Alipay的运行时log并没有启动PayActivity以及第三方应用的AndroidManifest.xml
- 后面我把第三方应用的代码直接写在Alipay中的MainActivity,结果可以启动PayActivity有没有大佬知道这种问题应该在哪里解决


如果你调用启动act,那么可能报错了,你应该把包含错误的日志也贴上来。