Autofill framework
顾名思义:
当用户交互触发自动填充请求时,Android系统会在客户端应用程序中创建屏幕的分层表示(称为view结构)。view结构包含可在每个节点中使用的自动填充类型以及节点的当前值等信息。Android系统将view结构添加到自动填充请求,并将其发送到尝试完成请求的自动填充服务。自动填充框架定义了用于保存用户数据的工作流程; 如果视图结构准确描述了客户端应用程序中的屏幕,则自动填充服务可以更好地满足请求。此外,您可以提供专门创建的其他信息,以帮助自动填充服务确定如何完成请求
一、
什么是Autofill Framework
1.它是一个服务端和客户端协同工作的基础结构,自动填写框架主要针对与某些应用的用户数据自动填写view,和管理应用之间的一种通信机制;
2.在了解这两个类之前先看一下关于自动填充的一些相关信息,自动填写框架必须是在(API 26)也就是android8.0以后版本及更高版本才可以使用;
3. 便于用户在使用登录多个账户,或登录密码,邮箱,验证码等,减少用户使用过程中重新输入信息和错别字的修改;
4.用户可以自行选择多种自动填写服务(过程类似于选择输入法)。默认情况下,Google服务支持自动填写,不过用户可以自行添加任何三方自动填写app,操作方法如下:
Setting->system->languages&input->advanced->autofill services

Autofill services:服务端,用来保存和存储多个应用程序使用中的用户信息。
Autofill clients:客户端,指应用程序需要填写和保存用户数据的信息;
Android system:系统,主要是指如何使用AutofillService和AutofillManager与Clients协同工作的操作系统;
有关自动填充的更多信息,详情可参考链接:
https://developer.android.com/guide/topics/text/autofill

二、如何构建autiofill service
1.首先是要清单文件声明权限,“android.permission.BIND_AUTOFILL_SERVICE”,在res文件定义xml包, 生成一个service_configuration.xml资源用来指定用户允许用户配置service的Activity;

AndroidManifest.xm

<serviceandroid:name=".MyAutofillService"android:label="My Autofill Service"android:permission="android.permission.BIND_AUTOFILL_SERVICE"><intent-filter><action        android:name="android.service.autofill.AutofillService" /></intent-filter><meta-dataandroid:name="android.autofill"android:resource="@xml/service_configuration" />
</service>

service_configuration.xml

<autofill-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:settingsActivity="com.example.android.SettingsActivity" />

2.这里要注意的是"android.service.autofill.AutofillService"这个action,在AutofillService中onBind方法中有一个判断,如过action匹配则将通信通道返回给服务 ,反之客户端将无法绑定到服务,如图1,下滑线的server apk则不会出现;

public static final String SERVICE_INTERFACE ="android.service.autofill.AutofillService";
...
@Override
public final IBinder onBind(Intent intent) {
if (SERVICE_INTERFACE.equals(intent.getAction())) {return mInterface.asBinder();}Log.w(TAG, "Tried to bind to wrong intent: " + intent);return null;
}

图 1;

3.在用户启用BIND_AUTOFILL_SERVICE权限后,可以通过AutofillManager调hasEnabledAutofillServices()方法来进行验证,是否启动当前服务,如果没有启动可通过intent发生一个ACTION_REQUEST_SET_AUTOFILL_SERVICE启动setting中autofill的Activity来选择更改自动填充服务如图2,如调用者和包匹配,intent则会返回一个值;

public class MainActivity extends Activity {
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);...//通过SystemService获取AutofillManager;mAutofillManager = getSystemService(AutofillManager.class);...}public void startSettingAutofillActivity(){if (mAutofillManager != null && !mAutofillManager.hasEnabledAutofillServices()) {//通过此参数可直接打开settingActivity自动填充页面;Intent intent = new Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE);intent.setData(Uri.parse("package:com.example.android.autofill.service"));startActivityForResult(intent, 1);} else {//如果应用调用此API的,已启用自动填充服务将被禁用。mAutofillManager.disableAutofillServices();}}
}

图2:

4.自定义Autofillservice,需要重新两个方法onFillRequest()和onSaveRequest(),这两个方法是AutofillService中的回调方法,在什么事后回调, onFillRequest()点击自动填充执行填充时,切当前用户没有记录时调用该方法; onSaveRequest()请求服务保存内容时调用该方法;

public class MyAutofillService extends AutofillService{@Overridepublic void onFillRequest(@NonNull FillRequest request, @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback) {}@Overridepublic void onSaveRequest(@NonNull SaveRequest request, @NonNull SaveCallback callback) {}}

5.在输入用户名或密码点击登录或finish当前Activity时,acitvity处于onStop状态时,此时会调起onActivityFinishing最终调起showSaveUi,并创建SaveUi对象,其SaveUI内部就是创建了一个Dialog,在显示dialog的执行过程中,会把自动填充的数据采用ArrayMap<Id,value>进行封装,最后通过onSave()方法对其进行保存,如图3;

图3:

如何构建autofill service https://blog.csdn.net/xiao_yuanjl/article/details/85098706

关于AutofillService和AutofillManager详细使用,可先看如下两个链接,不过需要翻墙才可以:
https://developer.android.com/reference/android/service/autofill/AutofillService
https://developer.android.com/reference/android/view/autofill/AutofillManager#public-methods

Android 新增API Autofill相关推荐

  1. Android 中文API合集 最终版,androi中文api合集.doc

    androi中文api合集 HYPERLINK "/over140/archive/2011/01/04/1925146.html" Android 中文API合集(3)(83篇) ...

  2. 初步探究Android App API接口测试--实战

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  3. Android 各 API Level 权限变更和功能限制汇总

    Android 各 API Level 权限变更和功能限制汇总 文章目录 信息访问限制 序列号 不可重置的设备标识符 MAC 地址 涉及位置信息的 telephony.WLAN.Bluetooth A ...

  4. Android L API Overview

        最近Android L发布,变化非常大,对很多细节进行了优化,特别是新的Android运行环境(ART).Notification.材料设计值得我们重点关注,故对Android L API O ...

  5. Android的API与差异化之路

              Android的API与差异化之路                 发挥Android特色:框架API和开源(开放)     Android平台就如同×××长城般,两岸的硬件业厂商 ...

  6. Android 中文API (94) —— MediaController

    前言 本章内容是android.widget.MediaController,版本为Android 2.3 r1,翻译来自"唐明",再次感谢"唐明" !期待你一 ...

  7. Android 中文 API 文档 (45) —— AbsoluteLayout.LayoutParams

    前言 本章内容是 android.widget.AbsoluteLayout.LayoutParams,版本为Android 2.2 r1,翻译来自"绵白糖",再次感谢" ...

  8. Android 中文API (92) —— MenuInflater

    前言 本章内容是android.view.MenuInflater,版本为Android 2.3 r1,翻译来自"獨鍆躌踄",欢迎大家访问他的博客:http://www.cnblo ...

  9. Android 中文 API (90) —— WindowManager

    一.结构 public interface WindowManager extends android.view.ViewManager android.view.WindowManager 二.概述 ...

最新文章

  1. Java学习笔记-包装类
  2. 用 Java 爬小姐姐图片,这个厉害了。。。
  3. MemCache内存缓存系统
  4. php 多进程 消息队列,[PHP] 多进程通信-消息队列使用
  5. Log4j Bug –减慢您的应用程序
  6. android studio简易记账本,Android记账本
  7. Qt工作笔记-ListWidget拖动(拖拽)到QGraphicsScene
  8. python图像处理的常用操作
  9. 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)...
  10. 打印html文件都是空白页,我打印时的额外空白页面(IE中除外) – 是我的打印css吗?...
  11. flume流程之SpoolDir-memory-hdfs
  12. 批量图片验证模型错误: OP_REQUIRES failed at save_restore_v2_ops.cc:184 : Not found: Key conv1_1/bias not found
  13. 关于SqlServer练习题
  14. golang和经济学相关资料学习,还不错,果然B站是个学习的好地方。
  15. Win10右键菜单“发送到”添加/删除选项的方法
  16. STM32项目设计:基于STM32F1的智能门锁PCB、源码(4种解锁方式)
  17. 一文概览2D人体姿态估计
  18. 【设计模式】模板模式实现报表模板
  19. 拉格朗日插值法(图文详解)
  20. http://club.topsage.com/thread-2203076-1-1.html

热门文章

  1. 【转】[Qt教程] Qt串口通信全新专题
  2. 免费使用OriginPro学习版
  3. ZKAttest: Ring and Group Signatures for existing ECDSA keys 学习笔记
  4. PyPi到底是什么?pypi有啥作用?PyPi和pip有何渊源?
  5. 序列化之Serialize
  6. opencv 边缘检测,角点检测
  7. windows挂载webdav
  8. python爬虫实战-bs4爬取2345电影
  9. wx网罗系列之翔实:使用C++开发wxWidgets程序
  10. huoshan_火山版 xl,xa,xg,xk 签名参数分析