近来试验了很多品牌的手机,发现只有华为手机快速点击会打开两次页面,而且是必现的,坑...
以下是我使用的防快速点击的方案
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);
}
}
网友评论