Android中如何通过代码以编程方式关闭Stripe PaymentSheet
解决Android Stripe PaymentSheet超时自动关闭的问题
以下是针对该问题的几种可行思路:
反射调用PaymentSheet内部的cancel方法
Stripe Android SDK的PaymentSheet内部存在cancel()方法用于关闭自身,但未对外暴露。可以通过反射机制调用该方法:// 假设你持有PaymentSheet实例paymentSheet try { Method cancelMethod = PaymentSheet.class.getDeclaredMethod("cancel"); cancelMethod.setAccessible(true); cancelMethod.invoke(paymentSheet); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); }注意:SDK版本更新可能会修改内部方法结构,需做好兼容性测试。
后端主动终止PaymentIntent同步前端状态
计时器结束时,调用后端接口通过Stripe官方API将对应PaymentIntent的状态设置为canceled。前端通过PaymentSheetResultCallback监听状态变化,PaymentSheet会自动响应状态变更并关闭,同时你可在回调中处理当前Activity的销毁逻辑。遍历系统窗口强制关闭PaymentSheet
PaymentSheet本质是独立的Dialog窗口,可遍历当前应用的所有窗口,识别出Stripe的PaymentSheet窗口并关闭:WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); for (WindowManager.LayoutParams params : windowManager.getViewRoots()) { View view = params.getView(); if (view != null && view.getContext().getPackageName().equals("com.stripe.android")) { if (view instanceof Dialog) { ((Dialog) view).dismiss(); break; } } }该方式需注意权限和窗口识别的准确性,不同SDK版本可能存在窗口特征差异。
内容的提问来源于stack exchange,提问作者shailesh
相关产品推荐
相关产品推荐

