? ? ? 最新小菜在用研究借助 WebView h5 跳转 微信和支付宝支付页面,研究了挺久,一直没有找到合适的判断。很简单的两小段代码分享一下,希望可以帮助需要的朋友。
? ? ? 目前小菜是借助的 TBS X5 浏览器内核的 WebView,原理是一样的。主要是对url内容的判断,以下是关键代码部分,大家一看便了解:
? ? ? 可以支持的包括:微信扫码、微信--手机快捷支付、支付宝扫码、支付宝--手机快捷支付、QQ扫码、QQ钱包(WAP)
mWebView.setWebViewClient(new WebViewClient() {
? ? @Override
? ? public boolean shouldOverrideUrlLoading(WebView view, String url) {
? ? final Activity context = AdvertX5Activity.this;
? ? // ===========调用微信支付页面===========
? ? // 如下方案可在非微信内部WebView的H5页面中调出微信支付
? ? if(url.startsWith("weixin://wap/pay?") || url.startsWith("weixin")|| url.startsWith("wechat")) {
? ? ? ? try{
? ? ? ? ? ? ?context.startActivity(newIntent("android.intent.action.VIEW", Uri.parse(url)));
? ? ? ? }catch(Exception e) {
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? }
? ? ? ? return true;
? ? }
? ? // ===========调用QQ钱包页面(mqqapi测试效果作用较大)===========
? ? if(url.startsWith("mqqapi") || url.startsWith("mqqwpa")) {
? ? ? ? try{
? ? ? ? ? ? context.startActivity(newIntent("android.intent.action.VIEW", Uri.parse(url)));
? ? ? ? }catch(Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return true;
? ? }
? ? // ===========调用支付宝支付页面===========
? ? // ------? 对alipays:相关的scheme处理 -------
? ? if(url.startsWith("alipays:") || url.startsWith("alipay")) {
? ? try {
? ? ? ? context.startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
? ? } catch (Exception e) {
? ? ? ? new android.support.v7.app.AlertDialog.Builder(context)
.setMessage("未检测到支付宝客户端,请安装后重试。")
.setPositiveButton("立即安装", new DialogInterface.OnClickListener() {
? ? @Override
? ? public void onClick(DialogInterface dialog, int which) {
? ? ? ? Uri alipayUrl = Uri.parse("https://d.alipay.com");
? ? ? ? context.startActivity(new Intent("android.intent.action.VIEW", alipayUrl));
? ? }
}).setNegativeButton("取消", null).show();
}
return true;
}
? ? // ------- 处理结束 -------
? ? if (!(url.startsWith("http") || url.startsWith("https"))){ ? return true; ? ?}
? ? return false;
}
? ? @Override
? ? public void onPageStarted(WebView webView, String s, Bitmap bitmap) {
? ? ? ? super.onPageStarted(webView, s, bitmap);
? ? }
? ? @Override
? ? public void onPageFinished(WebView view, String url) {
? ? ? ? super.onPageFinished(view, url);
? ? }
});