16:跳过密码保存,因为可能会提示用户使用 Android 自动填充

2023-11-27

我正在将谷歌智能锁集成到我的 Android 应用程序中,但在某些设备中,当我尝试将凭据保存到谷歌时,我收到此错误。我正在使用以下代码来保存凭据 -

 Credential credential = new Credential.Builder(email)
                                       .setPassword(password)
                                       .build();
 saveCredentials(credential);

在谷歌上搜索此解决方案后发现需要禁用应用程序中的自动填充功能来保存密码。

尝试 1 - 将以下代码放入特定活动中的 commit autofillmager 活动中并禁用自动填充。但它不起作用。

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    AutofillManager autofillManager = getSystemService(AutofillManager.class);
    autofillManager.commit();

    getWindow()
            .getDecorView()
            .setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
 }

尝试 2 - 将以下内容放入属性中EditText

 android:longClickable="false"

longClickable 应该停止自动填充,但它不起作用。

 android:importantForAutofill="no"

也尝试与importantForAutoFill但它也不起作用。


最后我找到了解决方法。出现此错误是因为系统自动填充正在尝试超越您的谷歌自动填充实现。

因此,首先我们必须禁用 Android 操作系统尝试自动填充输入字段并禁用我们应用程序的自动填充功能。

为了禁用自动填充我做了两件事..

我尝试通过以下 xml 属性禁用系统自动填充,但根本不起作用。

android:importantForAutofill="否"

这根本不起作用..然后我找到了以下答案。建议实现自定义 EditText (或任何输入类型)并禁用源中的自动填充尝试。实现您自己的 EdiText 版本,如下所示。

public class EditTextWithNoAutoFill extends androidx.appcompat.widget.AppCompatEditText {

    public EditTextWithNoAutoFill(@NonNull Context context) {
        super(context);
    }

    public EditTextWithNoAutoFill(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextWithNoAutoFill(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public int getAutofillType() {
        return View.AUTOFILL_TYPE_NONE;
    }

    @Override
    public int getImportantForAutofill() {
        return IMPORTANT_FOR_AUTOFILL_NO;
    }
}

}

Fixe 在于这两个方法实现 'getImportantForAutofill()' & 'getAutofillType()'

然后我也应用了这个..

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            getWindow().getDecorView().setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
        }

应用这两个更改并运行它后,并没有立即解决我的问题..我必须重新启动正在运行的设备/清理构建缓存/重新启动 android studio(不确定哪个选项触发了修复)

经过上述更改后,一切正常。

有关禁用操作系统“自动填充”的更多参考,我将此参考保留为原始答案

https://stackoverflow.com/a/46698028/9901309

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

16:跳过密码保存,因为可能会提示用户使用 Android 自动填充 的相关文章

随机推荐

  • 通过复选框删除多个项目

    我希望能够通过复选框选择多个项目并将其在一个地方删除 这是代码 div class product image div div class product desc div div div
  • Kotlin 方法前的加号是什么意思?

    我正在学习 Kotlin 并且正在观看 Android 开发峰会 更具体地说 是 Leland Richardson 的演讲 Undestand Compose 在演示时 28分26秒 他展示了以下代码 Composable fun App
  • 需要按顺序发送多个 Volley 请求

    我需要使用 volley 发送请求以检索会员 ID 然后将该会员 ID 传递到第二个 volley 请求中以检索该会员的统计信息 我的第一个请求完美运行时出现问题 但第二个请求似乎在变量返回传递之前开始 有人知道如何防止第二个请求在返回值之
  • 获取 UIScrollView 内的 UIButton 绝对屏幕位置

    这可能是一个愚蠢的问题 但我找不到答案 我有一个 UIScrollView 和一些 UIButtons 里面 当我按下按钮时 我想知道按钮的屏幕位置 如果我使用button frame 它会给我UIScrollView内的位置 这是正常的
  • PHP 上传 - 500 内部服务器错误

    问题 上传大约 8MB 或以上的文件时 我收到 500 内部服务器错误 所有 PHP 设置位于php ini是正确的 maxAllowedContentLength已在 web config 中设置 服务器信息 人们或许可以从maxAllo
  • Pygame 中的平滑键盘移动

    我使用此代码让玩家精灵在按下箭头键时在屏幕上移动 import pygame sys time from pygame locals import pygame init FPS 30 fpsClock pygame time Clock
  • React:如果输入值按状态更改,则触发 onChange?

    Edit 我不想仅在单击按钮时才调用handleChange 它与handleClick 无关 我在 shubhakhatri 答案的评论中举了一个例子 我想根据状态改变输入值 值在改变但不触发handleChange 方法 我怎样才能触发
  • R 脚本中的 here() 问题

    R 脚本中的问题 我试图了解here 如何以可移植的方式工作 找到了 看看下面有什么工作最终答案 TL DR 底线 here 运行 a 并不是真的那么有用script R从命令行 我在 JBGruber 的帮助下理解它的方式 here 查找
  • 有没有办法找到 Microsoft SQL Server 中每个表的每个字段的特定值?

    有没有办法找到 Microsoft SQL Server 中每个表的每个字段的特定值 例如 我希望找到其中包含 666333222 的任何记录 可能吗 您可以尝试以下存储过程来搜索每个表的每个字段 对于特定值 CREATE PROC sp
  • NSStringFromClass([MyEntityClass class]) 是否生成安全的核心数据实体名称?

    大多数 我见过的所有 核心数据教程都使用以下代码片段 MyEntityClass 硬编码在 NSFetchRequest request NSFetchRequest alloc initWithEntityName MyEntityCla
  • Swift 中的 Xcode 6.1 属性字典

    从 Xcode 6 Beta 7 升级到 Xcode 6 1 Beta 2 后 以下内容不再起作用 let font UIFont name Arial size 16 let colour UIColor redColor let att
  • 适用于 iOS5 的 FFmpeg

    有人能够使用 iOS5 sdk 编译 ffmpeg 库吗 我找到了使用 4 3 sdk 的脚本 但没有找到适用于 iOS5 的脚本 我假设使用旧 sdk 和 armv7 构建的库仍然兼容 iOS 5 这是我尝试使用的命令 configure
  • 在过程中将提交放在 DML 之后有什么效果?

    我在一个包中创建了一个过程 该过程正在表中执行插入 删除操作 事务成功后 提交完成 像这样 create or replace package pac is procedure pr test emp id number is begin
  • Java KeyListener 与键绑定

    我正在尝试编写一个计算器并遇到问题 我已经为所有按钮制作了一个动作侦听器 现在我想让从键盘输入数据成为可能 我是否需要为 KeyListener 或 Keybinding 完成所有操作 或者是否有其他方法可以在单击按钮后将其发送到 acti
  • 在 Windows 命令行中自动化 cygwin 命令(最终在 MsBuild 中)

    我遇到的情况是 我有一些 cygwin 命令 我希望在 Windows 命令行中运行它们 例如 chmod 777 home administrator 目前我必须手动输入cygwin bat 然后在cygwin中输入上述命令 我想知道是否
  • 在 Android 上使用 BasicHttpRequest 从 webview 共享 cookie

    我在发送 cookie 作为 http get 的一部分时遇到问题 首先 我进入网络视图中的登录页面 该页面为我提供了一个 cookie 我已经检查过 cookie 存储在 CookieManager 中 然后我使用 BasicHttpRe
  • 将 json 数据转换为 html 表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 是否有任何 jQuery 或 javascript 库可以根据给定的 json 数据生成动态表 我不想定义列 库应该读取 json 哈希中的键并生成列 当然 我可以自己迭代json数
  • 如何获取特定语言的 DBpedia 数据?

    我尝试了这个请求 但如果我想检索意大利语信息 还有其他服务 类似 可以吗 你可以使用dbpedia SPARQL 端点运行查询 例如 PREFIX rdfs
  • 在 Python 中跟踪被忽略的异常?

    我的应用程序有一个自定义音频库 它本身使用 BASS 库 我在整个程序中创建和销毁 BASS 流对象 当我的程序随机退出时 我还没有弄清楚模式 我在控制台上收到以下通知 Exception TypeError NoneType object
  • 16:跳过密码保存,因为可能会提示用户使用 Android 自动填充

    我正在将谷歌智能锁集成到我的 Android 应用程序中 但在某些设备中 当我尝试将凭据保存到谷歌时 我收到此错误 我正在使用以下代码来保存凭据 Credential credential new Credential Builder em