You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin WebView JS交互调亮度遇mContext未解析错误

问题原因与解决方案

错误原因

  1. mContext未声明为类属性:Kotlin中构造函数参数如果不添加val或var修饰,仅为构造函数内的局部变量,无法在类的其他方法中访问,这是导致“Unresolved reference: mContext”的直接原因。
  2. 类型转换语法错误:Kotlin不支持Java风格的((FullscreenActivity)mContext)强制转换,需使用as关键字进行类型转换。
  3. 缺乏类型安全检查:直接强制转换可能引发ClassCastException,建议先判断上下文类型。

修正后的代码

FullscreenActivity类

class FullscreenActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_fullscreen) // 补充布局加载代码,原代码缺失
        val webView = findViewById<WebView>(R.id.webView)
        // 开启WebView的JavaScript支持
        webView.settings.javaScriptEnabled = true
        webView.addJavascriptInterface(WebAppInterface(this), "Android")
    }

    fun jsmessage() {
        val lp = window.attributes
        lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF
        window.attributes = lp
    }
}

WebAppInterface类

class WebAppInterface(private val mContext: Context) {

    @JavascriptInterface
    fun message(data: String) {
        Log.d("TAG", data)
        // 先检查上下文类型,避免类型转换异常
        if (mContext is FullscreenActivity) {
            mContext.jsmessage()
        }
    }
}

网页端调用示例

在网页的JavaScript代码中,通过以下方式触发原生亮度调节逻辑:

// 调用原生暴露的接口
Android.message("adjust_brightness");

额外注意事项

  • 必须开启WebView的JavaScript支持,否则网页无法调用原生接口。
  • 当前代码仅修改当前窗口的亮度覆盖值,若需要调节系统全局亮度,需申请WRITE_SETTINGS权限,并通过Settings.System.putInt修改系统设置项。

内容的提问来源于stack exchange,提问作者Thomas Schulze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:49:55