如何在Android Compose应用中启用键盘的扫描新卡片功能
在Compose中实现信用卡扫描自动填充功能
要触发系统提供的“扫描新卡片”自动填充选项,你的现有Autofill Modifier缺少关键配置,以下是完整实现方案:
1. 指定正确的Autofill类型与提示
系统仅会对明确标记为信用卡相关的字段提供扫描选项,必须使用对应AutofillType和系统Autofill提示:
- 信用卡卡号:
AutofillType.CreditCardNumber+View.AUTOFILL_HINT_CREDIT_CARD_NUMBER - 有效期:
AutofillType.CreditCardExpirationDate+View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE - 安全码:
AutofillType.CreditCardSecurityCode+View.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE
2. 修正Autofill Modifier实现
添加autofillHints参数关联系统提示,让系统识别字段类型:
fun Modifier.creditCardAutofill( autofillTypes: List<AutofillType>, autofillHints: List<String>, onFill: (String) -> Unit, ) = composed { val autofill = LocalAutofill.current val autofillNode = AutofillNode( onFill = onFill, autofillTypes = autofillTypes, autofillHints = autofillHints ) LocalAutofillTree.current += autofillNode this.onGloballyPositioned { autofillNode.boundingBox = it.boundsInWindow() }.onFocusChanged { focusState -> autofill?.run { if (focusState.isFocused) { requestAutofillForNode(autofillNode) } else { cancelAutofillForNode(autofillNode) } } } }
3. 在输入框中应用Modifier
以信用卡卡号输入框为例:
var cardNumber by remember { mutableStateOf("") } OutlinedTextField( value = cardNumber, onValueChange = { cardNumber = it }, label = { Text("信用卡卡号") }, modifier = Modifier.creditCardAutofill( autofillTypes = listOf(AutofillType.CreditCardNumber), autofillHints = listOf(View.AUTOFILL_HINT_CREDIT_CARD_NUMBER), onFill = { cardNumber = it } ) )
4. 系统与设备要求
- 设备需运行Android 8.0(API 26)及以上,Autofill框架从该版本开始支持。
- 系统已启用支持信用卡扫描的Autofill服务(如Google自动填充服务),可在系统设置中确认。
- 输入框获得焦点时,系统会自动弹出包含“扫描新卡片”的填充菜单。
排查要点
- 确认
AutofillType和autofillHints与字段类型严格匹配,系统依赖这些标记识别信用卡字段。 - 检查设备Autofill服务是否开启,部分第三方Autofill服务可能不支持信用卡扫描功能,建议使用系统默认服务测试。
内容的提问来源于stack exchange,提问作者Ujjwal Kumar Maharana
相关产品推荐
相关产品推荐

