做过微信支付的都知道,集成微信支付时必须在我们的包名下创建wxapi文件夹里面有一个WXPayEntryActivity。
为什么要这样做呢?支付成功后再微信中“返回商家”又是如何跳转到WXPayEntryActivity呢?
我们的程序启动了微信,微信把结果又返回给了我们的app,这就用到了进程间通信。
进程间通信(IPC)这个大家应该不陌生,大体分为六种:
Bundle/Intent传递数据,文件共享,Messenger,AIDL,ContentProvider,Socket。
很明显微信这里用的是第一种Bundle/Intent方式。
通过如下代码可以启动对应的activity,并通过bundle传递数据。
val intent= Intent()
//packageName是你的包名
intent.setClassName("packageName","packageName.wxapi.WXPayEntryActivity")
startActivity(intent)
但在微信中是无法直接通过显示意图去启动别的应用的activity的。所以需要把我们的activity exported出来。
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleInstance"/>
这样就可以了。
这里就很容易理解为什么非要在包名下创建wxapi文件夹,里面还要放一个WXPayEntryActivity。
因为不这么做微信找不到完成后要跳转的activity。在我们启动微信的时候把包名传过去了,然后根据包名+wxapi. WXPayEntryActivity。就可以了。
启动WXPayEntryActivity后通过
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
api.handleIntent(getIntent(), this);
把数据解析出来,在activity实现的接口的方法中就拿到了结果。