华为IAP中startResolutionForResult适配及onActivityResult替代方案咨询
替换废弃的onActivityResult实现华为IAP支付结果处理
Android官方已废弃onActivityResult,推荐使用Activity Result API处理页面跳转后的结果回调,以下是适配华为IAP支付的具体改造步骤:
1. 定义ActivityResultLauncher
在你的Activity或Fragment中,注册专门用于接收支付结果的ActivityResultLauncher,把原来onActivityResult里的逻辑移到回调中:
private val buyLauncher = registerForActivityResult(StartIntentSenderForResult()) { result -> val data = result.data val resultCode = result.resultCode if (resultCode == Activity.RESULT_OK && data != null) { // 解析华为IAP支付结果,替换成你原来的业务处理逻辑 runCatching { val payResult = IapApiFactory.createApi().parsePayResultFromIntent(data) when (payResult.returnCode) { OrderStatusCode.ORDER_STATE_SUCCESS -> { // 支付成功,执行后续业务 } OrderStatusCode.ORDER_STATE_CANCEL -> { // 用户取消支付 } else -> { Log.e(TAG, "支付失败,错误码: ${payResult.returnCode}") } } }.onFailure { Log.e(TAG, "解析支付结果失败", it) } } else { Log.e(TAG, "支付结果异常,resultCode: $resultCode") } }
2. 替换startResolutionForResult调用
把原来启动支付跳转的代码,从status.startResolutionForResult(activity, REQ_CODE_BUY)替换为使用上述launcher启动:
if (status.hasResolution()) { try { val intentSender = status.resolution.intentSender buyLauncher.launch(IntentSenderRequest.Builder(intentSender).build()) } catch (exp: SendIntentException) { Log.e(TAG, exp.message!!) } } else { Log.e(TAG, "intent is null") }
3. 删除废弃的onActivityResult方法
原来的onActivityResult方法可以直接删除,所有支付结果逻辑已迁移到buyLauncher的回调中。
注意事项
registerForActivityResult必须在Activity/Fragment的onCreate阶段或之前调用,不能在生命周期后期(如onStart之后)注册,否则会触发异常。- 每个
ActivityResultLauncher对应单一请求场景,无需再用请求码区分,逻辑更简洁。
内容的提问来源于stack exchange,提问作者sheko
相关产品推荐
相关产品推荐

