Android 10系统WebView中Scan new card信用卡扫描功能异常咨询
解决方案
问题1:Android 10设备不显示「Scan new card」选项
根因
Android 10对WebView的自动填充能力、权限管控做了升级,缺少对应配置、相机权限未授权都会导致系统不触发信用卡扫描入口。
修复步骤
- 补充WebView基础配置,在原有
onCreate的WebSettings逻辑中添加以下代码:
webSettings.setDomStorageEnabled(true); webSettings.setSaveFormData(true); // 适配Android 8+系统自动填充框架 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { mWebView.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_YES); } // 配置WebChromeClient支持相机权限请求 mWebView.setWebChromeClient(new WebChromeClient() { @Override public void onPermissionRequest(PermissionRequest request) { request.grant(request.getResources()); } });
- 提前申请相机权限:在加载WebView页面之前,先动态向用户申请
CAMERA权限,同时在AndroidManifest.xml中声明权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false" />
- 确保设备Android System WebView版本 ≥ 76,低版本WebView不支持原生信用卡扫描触发逻辑。
问题2:Android 8设备无法获取持卡人姓名
根因
Android 8.x版本的系统自动填充框架对cc-name属性适配存在缺陷,部分厂商自带的扫描服务默认不会返回持卡人姓名字段。
修复步骤
- 调整HTML输入框属性,增加兼容标识:
<input autocomplete="cc-name name" id="nameoncard" name="cc-name nameoncard" type="text">
- 做降级兼容:如果扫描完成后持卡人姓名字段为空,直接弹出提示引导用户手动补填即可,Android 8.x的系统级扫描服务本身存在该类适配问题,没有100%能强制返回姓名的方案。
- 若需要完全规避系统适配问题,可以自己集成第三方信用卡扫描SDK,扫描拿到所有卡片信息后通过JS注入的方式赋值到HTML输入框:
// 扫描成功后执行以下代码注入字段 mWebView.evaluateJavascript("document.getElementById('nameoncard').value = '"+扫描获取的持卡人姓名+"';", null); // 同理注入卡号、有效期等其他字段
内容的提问来源于stack exchange,提问作者Divyang Solanki
相关产品推荐
相关产品推荐

