菜单

SaleSmartly Android webview对接

Android下可以借助webview,SaleSmartly Android webview Demo示例,点击下载

App Manifest需要的权限

复制代码
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<br>

webview 基础设置

kotlin 复制代码
 // 启用JavaScript
 webView.settings.javaScriptEnabled = true

  // 启用 localStorage
  webView.settings.domStorageEnabled = true

webview 处理文件上传

详细代码可以查看到demo

kotlin 复制代码
 webView.webChromeClient = object : WebChromeClient() {
            override fun onShowFileChooser(
                webView: WebView,
                filePathCallback: ValueCallback<Array<Uri>>,
                fileChooserParams: FileChooserParams
            ): Boolean {
                println("onShowFileChooser")
                mUploadMessageAboveL = filePathCallback
                val intent = Intent(fileChooserParams.createIntent())
                intent.addCategory(Intent.CATEGORY_OPENABLE)
                intent.type = "*/*"
                intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) // 允许多选
                register.launch(Intent.createChooser(intent, "Select File"))

                return true
            }
  }

webview 处理视频全屏播放

详细代码可以查看到demo

kotlin 复制代码
 webView.webChromeClient = object : WebChromeClient() {
            override fun onShowFileChooser(
                webView: WebView,
                filePathCallback: ValueCallback<Array<Uri>>,
                fileChooserParams: FileChooserParams
            ): Boolean {
                println("onShowFileChooser")
                mUploadMessageAboveL = filePathCallback
                val intent = Intent(fileChooserParams.createIntent())
                intent.addCategory(Intent.CATEGORY_OPENABLE)
                intent.type = "*/*"
                intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) // 允许多选
                register.launch(Intent.createChooser(intent, "Select File"))

                return true
            }

            override fun onShowCustomView(view: View, callback: CustomViewCallback) {
                // 当视频请求全屏时,显示自定义视图
                if (customView != null) {
                    callback.onCustomViewHidden()
                    return
                }

                customView = view
                customViewContainer.visibility = View.VISIBLE
                customViewContainer.addView(customView)
                customViewCallback = callback
                webView.visibility = View.GONE
                customViewContainer.bringToFront()
            }

            override fun onHideCustomView() {
                // 当退出全屏时,恢复默认视图
                customView?.let {
                    customViewContainer.removeView(it)
                    customView = null
                    customViewContainer.visibility = View.GONE
                    customViewCallback?.onCustomViewHidden()
                    webView.visibility = View.VISIBLE
                }
            }

            override fun getDefaultVideoPoster(): Bitmap {
                return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888)
            }

        }

常见问题

1. 图片、文件点击上传没有反应

需要对webview的"onShowFileChooser"进行重写, 详细请参考demo。

2. 视频播放无法全屏或退出全屏后出现异常

全屏时使用自定义视图,退出后隐藏,显示原视图,详细请参考demo。

3. 无法加载或显示

请检查网络权限、网络状态、页面引入的js是否正确以及插件是否开启,建议先在浏览器运行、测试,通过后再放到app里面进行测试。

4. 点击链接没有反应

请检查一下App是否对打开链接进行拦截或者其他处理

5. 点击链接之后跳转到外部浏览器后返回空白

请检查一下App对链接跳转的处理方式

上一个
SaleSmartly IOS 开发者文档
下一个
如何使用webhook
最近修改: 2025-04-15Powered by