Android Kotlin WebView JS交互调亮度遇mContext未解析错误
问题原因与解决方案
错误原因
mContext未声明为类属性:Kotlin中构造函数参数如果不添加val或var修饰,仅为构造函数内的局部变量,无法在类的其他方法中访问,这是导致“Unresolved reference: mContext”的直接原因。- 类型转换语法错误:Kotlin不支持Java风格的
((FullscreenActivity)mContext)强制转换,需使用as关键字进行类型转换。 - 缺乏类型安全检查:直接强制转换可能引发
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
相关产品推荐
相关产品推荐

