美文网首页
Android快速点击使支付宝不能调起支付的问题

Android快速点击使支付宝不能调起支付的问题

作者: dhhuanghui | 来源:发表于2019-11-30 09:05 被阅读0次

    近来试验了很多品牌的手机,发现只有华为手机快速点击会打开两次页面,而且是必现的,坑...
    以下是我使用的防快速点击的方案

    public class CheckFastClick {
        // 两次点击按钮之间的点击间隔不能少于1000毫秒
        private static final int MIN_CLICK_DELAY_TIME = 1000;
        private static long lastClickTime;
    
        public static boolean isFastClick() {
            boolean flag = false;
            long curClickTime = System.currentTimeMillis();
            if ((curClickTime - lastClickTime) < MIN_CLICK_DELAY_TIME) {
                flag = true;
            }
            lastClickTime = curClickTime;
            return flag;
        }
    }
    
    

    假如在每次点击的地方都加这个方法,那就太麻烦,因此就想了一个简单的方法,只需要写一次调用就行,这里只对点击打开Activity做处理,
    因为Activity或者Fragment中的startActivity方法,最后都会调用Activity中的
    startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options)方法,因此只需要在BaseActivity中重写该方法

        @SuppressLint("RestrictedApi")
        @Override
        public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
            if (!CheckFastClick.isFastClick()) {
                super.startActivityForResult(intent, requestCode, options);
            }
        }
    

    完美...
    但是,在使用支付宝支付的时候,始终没法调起支付宝,以前是可以的,各种找问题,最后发现当点击按钮发起支付宝支付时,支付宝会打开TransProcessPayActivity页面,
    然后又快速打开MspContainerActivity,时间是200ms到300ms左右,造成了快速点击,被CheckFastClick屏蔽了。
    解决办法:

        @SuppressLint("RestrictedApi")
        @Override
        public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
            if (intent != null) {
                ComponentName component = intent.getComponent();
                if (component != null) {
                    String className = component.getClassName();
                    //防快速点击会影响到支付宝支付,这里进行过滤
                    if ("com.alipay.android.app.TransProcessPayActivity".equals(className)
                            || "com.alipay.android.msp.ui.views.MspContainerActivity".equals(className)
                            || "com.alipay.sdk.app.H5PayActivity".equals(className)) {
                        super.startActivityForResult(intent, requestCode, options);
                        return;
                    }
                }
            }
            if (!CheckFastClick.isFastClick()) {
                super.startActivityForResult(intent, requestCode, options);
            }
        }
    

    相关文章

      网友评论

          本文标题:Android快速点击使支付宝不能调起支付的问题

          本文链接:https://www.haomeiwen.com/subject/mlonwctx.html