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

2019-11-30  本文已影响0人  dhhuanghui

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

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);
        }
    }
上一篇下一篇

猜你喜欢

热点阅读