记录一下Android的支付h5调原生支付

流程是客户端通过后台的接口生成支付订单,后台生成订单后会返回一个h5的支付url

import android.content.Contextimport android.content.Intentimport android.net.Uriimport android.os.CountDownTimerimport android.webkit.WebSettingsimport android.webkit.WebViewimport android.webkit.WebViewClientimport android.widget.Toast/** * 移动支付 h5 调用原生支付(微信/支付宝) * Created by ZYB on 2018/9/5 0005. */object PaymentUtil {    fun pay(context: Context, payurl: String) {        //如果10s内没收到shouldOverrideUrlLoading的回调,则重新调用        //我遇到的情况是在红米note4x调用支付宝 第一次会连shouldOverrideUrlLoading都不会回调,第二次就行        val countDownTimer = object : CountDownTimer(10000, 1000) {            override fun onTick(millisUntilFinished: Long) {            }            override fun onFinish() {                pay(context, payurl)            }        }        var webview = WebView(context)        webview.settings.javaScriptEnabled = true;        webview.settings.setRenderPriority(WebSettings.RenderPriority.HIGH)        webview.settings.setJavaScriptEnabled(true)        webview.settings.setSavePassword(false)        webview.settings.setJavaScriptCanOpenWindowsAutomatically(true)        webview.settings.setMinimumFontSize(webview.settings.getMinimumFontSize() + 8)        webview.settings.setAllowFileAccess(false)        webview.settings.setTextSize(WebSettings.TextSize.NORMAL)        webview.setVerticalScrollbarOverlay(true)        webview!!.setWebViewClient(object : WebViewClient() {            override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {                //判断是否是微信支付还是支付宝支付                if (url!!.startsWith("weixin://wap/pay?")) {                    try {                        countDownTimer.cancel()                        var intent = Intent();                        intent.setAction(Intent.ACTION_VIEW);                        intent.setData(Uri.parse(url));                        context.startActivity(intent);                    } catch (e: Exception) {                        Toast.makeText(context, "设备缺少微信应用,支付失败", Toast.LENGTH_SHORT).show();                    }                } else if (url!!.contains("platformapi/startApp")) {                    try {                        countDownTimer.cancel()                        val intent = Intent()                        intent.action = Intent.ACTION_VIEW                        intent.data = Uri.parse(url)                        intent.addCategory("android.intent.category.BROWSABLE")                        intent.component = null                        context.startActivity(intent)                    } catch (e: Exception) {                        Toast.makeText(context, "设备未安装支付宝", Toast.LENGTH_SHORT).show()                    }                }                return super.shouldOverrideUrlLoading(view, url)            }        })        webview!!.loadUrl(payurl)        countDownTimer.start()    }}

 

更多相关文章

  1. Android使用service后台更新计划任务
  2. Android 设置默认桌面,默认应用,辅助功能,电池优化,设备管理器,
  3. Ubuntu下使用adb和USB连接的方式进行android设备调试
  4. 【阿里聚安全·安全周刊】500万台Android设备受感染|YouTube封杀
  5. Android 上传图片到后台的一直方式Base64的String形式
  6. Android USB Gadget复合设备驱动(打印机)测试方法
  7. android使用websocket保持长连接 后台为nodejs带心跳检测
  8. Android 与 后台网络交互踩坑

随机推荐

  1. Android(安卓)字体设置-Typeface讲解
  2. AS Gradle构建工具与Android(安卓)plugin
  3. GitHub上优秀Android(安卓)UI Library
  4. Android(安卓)studio之蓝牙
  5. Android(安卓)- 电话拦截
  6. Mac环境下交叉编译生成Android版本的Assi
  7. android存储方式(转)
  8. Android根据屏幕宽度,按比例缩放图片
  9. 查看Android(安卓)ADT Plugin版本的方法
  10. android中短信协议与字段