Autofill Framework(自动填写)用法详解

本文详述了Android Autofill Framework的使用方法,包括在布局中通过autofillHints标记控件,创建自定义AutofillService,解析AssistStructure,自动填充表单数据,回调监听以及自定义View的autofill支持。示例代码基于Android O,讲解了如何保存和填充用户信息,如邮箱、密码、信用卡等。
摘要由CSDN通过智能技术生成

文/arjinmc

本文是基于官方demo来分析Autofill Framework的用法(要正常打开这个项目请使用Android Studio Preview 3.0以上版本,并下载Anroid O模拟器镜像)。Autofill Framework最低支持SDK API 26(Android O)+。

在手机中管理autofill服务:
设置->系统->语言与输入->高级->自动填写服务->选择自己想要的服务,点击它旁边的设置按钮可以进入这个autofill的设置界面(如果有给此服务设定了设置界面)
也就是:
setting->system->languages & input -> advanced -> autofill services

在layout中通过autofillHints标记需要记录的控件节点

通过属性autofillHints在标记需要记录的节点,也就是key-value的形式的key。
例如:标记记录密码框key为password

<EditText
    android:id="@+id/passwordField"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:autofillHints="password"
    android:inputType="textPassword" />

在代码中可以通过view.setAutofillHints(String… autofillHints) 方法来设置这些标记。
autofillHints的值都是View类(api 26版本)中定义的一些String类型常量,目前有13种,分别是:

  • AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE 信用卡到期日期
  • AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY 信用卡到期日
  • AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH 信用卡到期月
  • AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR 信用卡到期年
  • AUTOFILL_HINT_CREDIT_CARD_NUMBER 信用卡卡号
  • AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE 信用卡安全密码
  • AUTOFILL_HINT_EMAIL_ADDRESS 邮箱地址
  • AUTOFILL_HINT_NAME 用户真名
  • AUTOFILL_HINT_PASSWORD 用户密码
  • AUTOFILL_HINT_PHONE 电话号码
  • AUTOFILL_HINT_POSTAL_ADDRESS 邮寄地址
  • AUTOFILL_HINT_POSTAL_CODE 邮寄编号
  • AUTOFILL_HINT_USERNAME 用户名

view.setImportantForAutofill(int mode)
设置autofill的重要级别也是一些常量,对应xml的标签是android:importantForAutofill,有5种模式:

  • IMPORTANT_FOR_AUTOFILL_AUTO 不管是否重要,都使用autofill
  • IMPORTANT_FOR_AUTOFILL_NO 不使用autofill,但是子view可以使用
  • IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS 不使用autofill,子view也不使用
  • IMPORTANT_FOR_AUTOFILL_YES 使用autofill,包括子view
  • IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS 使用autofill,但子view不使用

AutofillService

1.创建自定义AutofileService,继承AutofillService

重写两个方法:

  • onSaveRequest(SaveRequest request, SaveCallback callback)
    保存需要自动填入记录。
List<FillContext> context = request.getFillContexts();
//保存步骤:
//1.得到最近一条需要填写的表单(表单的所有内容)
AssistStructure structure = context.get(context.size() - 1).getStructure();
//2.解析记录的数据AssistStructure
//3.通过SharedPreferences,数据库,文件等存储方式保存下来
  • onFillRequest(FillRequest request, CancellationSignal cancellationSignal,
    FillCallback callback)
    执行自动填入记录。
//自动填写步骤:
//1.得到最近一条需要填写的表单(表单的所有内容)
AssistStructure structure = request.getFillContexts()
                .get(request.getFillContexts().size() - 1).getStructure();
//2.获取保存的自动填写的表单的结果集Dataset放在FillResponse上
//3.通过FillCallback把FillResponse的内容展示到界面交互

在manifest中,声明AutofillService

<service
    <!-- 自己定义的autofillservie类名  -->
    android:name=".multidatasetservice.MyAutofillService"
    <!-- 申明权限  -->
    android:permission="android.permission.BIND_AUTOFILL"
    <!-- autofill的名字,随意设定,最终会显示在系统设置的autofill service上-->
    android:label="Multi-Dataset Autofill Service">
    <meta-data
        android:name="android.autofill"
        android:resource="@xml/multidataset_service" />
    <intent-filter>
        <action android:name="android.service.autofill.AutofillService" />
    </intent-filter>
</service>

2.获取表单节点并解析AssistStructure

//从AssistStructure获取view的节点
private void parse(){}
    int nodes = mStructure.getWindowNodeCount();
    for (int i = 0; i < no
进行表单填充。 Autofill扩展程序具有一个目的:在页面加载时自动填充表单字段,而无需用户进行任何交互。这是它的主要功能,但是它可以做的更多 Google Chrome浏览器具有内置的自动填充功能,但不适用于所有表单字段,并且需要您从下拉菜单中进行选择。即使您对Chrome浏览器的自动填充功能感到满意,但如果您希望获得更多自动化和强大功能,仍然可能需要此扩展程序。特点-设置并忘记:零点击即可填写表格! (还有一个手动触发选项)-最终控制:自动填充文本输入字段,textarea字段,密码字段,隐藏字段,HTML5输入甚至WYSIWYG编辑框(富文本编辑器);自动选择菜单和列表框;自动选中复选框和单选按钮;使用JavaScript自动单击按钮并自动提交表单-表单域向导:使用向导信息栏为您自动生成自动填充规则,而无需查看HTML代码-易于管理:创建配置文件以更好地组织自动填充规则-快速访问:使用工具栏图标添加自动填充规则;执行配置文件中的所有自动填充规则,并通过右键单击上下文菜单执行更多操作-放心:如果Chrome崩溃,则可以自动保存文本字段的选项-正则表达式:使用功能强大的文本匹配模式来标识要自动填充的字段(支持“ lookbehind')-变量:使用特殊变量来引用其他字段值,递增/递减数字,并输出随机数据(数字,字母数字字符,甚至来自集合中的单词)-网站过滤器:在每个网站或每个网站上限制自动填充-page基础-例外:指定要从自动填充中排除的页面或整个网站-导入/导出:将设置备份到本地文件或将其导入到Firefox的自动填充插件中-键盘快捷键:使用鼠标或键盘改进的可访问性新增功能-添加了自动备份文本字段的选项-添加了随机选择菜单和切换复选框的功能-改进了对表单验证的支持-改进了动态插入的元素nts观察器-处于手动模式时自动启用上下文菜单-导入后仍然禁用了延迟范围输入-修复了手动模式不支持动态插入的字段-修复了某些包含换行符的值JavaScript错误-修复了导入问题-修复了所选字段突出显示的问题-修复了添加规则(v6.12.1)时会擦除站点过滤器的问题。隐私和安全性自动填充不会,永远不会,也永远不会通过Internet传输任何数据。所有数据始终保留在本地硬盘驱动器上。但是,此扩展名保存的数据未加密,因此保存的所有数据都是明文,尽管它将保留在硬盘上,并且只有知道外观和对硬盘有物理访问权限的人才能访问它。 支持语言:English,português (Portugal),中文 (简体)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值