记录一下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四大基本组件介绍与生命周期
  2. 【转】 Android上调用google map api v2
  3. android Java代码的启动
  4. Android(安卓)7.1.2(Android(安卓)N) Activity-Window加载显示流
  5. android Activity生命周期详解(图文)
  6. android appwidget service的初始化
  7. Android(安卓)APK安装过程及原理详解
  8. popwindow动画显示消失,activity切换动画
  9. Android硬件访问服务 (硬核最终篇)

随机推荐

  1. Android的源代码下载教程
  2. android第一行代码实战篇——一个小错误
  3. 2010.11.28(2)———android 展示网页 和
  4. UI组件之AdapterView及其子类(二)GridView
  5. 什么是Android-Android中文SDK
  6. Android的常用adb命令
  7. Android(安卓)4.4 KitKat 更新内容
  8. Android(安卓)Retrofit 框架上传多张图片
  9. 【学习Android(安卓)NDK开发】native cod
  10. Android:只读EditText内容可滚动(禁止输