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

Android WebView内JsQRScanner无法工作 浏览器运行摄像头正常

解决方案

你现有配置缺少安卓运行时权限申请和部分WebView必要配置,按以下步骤修改即可:

  1. 主动申请安卓系统层摄像头动态权限
    Android 6.0(API 23)以上仅在Manifest声明权限无效,必须在加载WebView前向用户申请运行时权限,示例代码:
// 放在onCreate里加载WebView之前执行
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 100);
} else {
    // 已经有权限,直接初始化加载WebView
    initWebView();
}

// 重写权限申请结果回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 100) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            initWebView();
        } else {
            Toast.makeText(this, "需要摄像头权限才能扫码", Toast.LENGTH_SHORT).show();
        }
    }
}

其中initWebView()方法内放你原有的WebView初始化逻辑。

  1. 补充WebSettings缺失配置
    在你现有的WebSettings配置中添加以下代码:
// 允许媒体播放不需要用户手势,适配摄像头自动启动逻辑
webSettings.setMediaPlaybackRequiresUserGesture(false);
// 允许访问本地文件与内容资源
webSettings.setAllowFileAccess(true);
webSettings.setAllowContentAccess(true);
// 适配HTTPS混合内容场景,避免资源加载失败
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
  1. 修改AndroidManifest.xml配置
    添加摄像头硬件特性声明,避免部分机型识别不到可用摄像头:
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
  1. 调整WebChromeClient权限申请逻辑
    确保权限申请操作在UI线程执行,避免部分系统版本调用失败:
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onPermissionRequest(final PermissionRequest request) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            runOnUiThread(() -> request.grant(request.getResources()));
        }
    }
});

额外排查点

如果按以上配置仍无法调用摄像头,可在AndroidManifest.xml对应的Activity标签中开启硬件加速:

<activity
    android:name=".MainActivity"
    android:hardwareAccelerated="true">
</activity>

内容的提问来源于stack exchange,提问作者Sapta Ahmad Afrizal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:57:01