Android O具有支持字段自动填充的功能.有什么办法可以为特定的应用程序禁用它.那是我想强制我的应用程序不使用自动填充服务.
可能吗 ?
要阻止整个活动的自动填充,请在活动的onCreate()中使用:
getWindow()
.getDecorView()
.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
Run Code Online (Sandbox Code Playgroud)
有没有比这更好的方法?
android autofill textview android-8.0-oreo android-autofill-manager
在Android设备上运行测试sdk 26会导致它们失败,因为新的自动填充功能会在espresso尝试点击它们时隐藏字段.
我在firebase测试实验室运行我的测试,所以我不能在我的测试设备上手动禁用它们.
一些图片:
Espresso无法点击现在的密码字段,因为自动填充对话框隐藏了我的字段和fail.
AutofillManager#disableAutofillServices()仅使用禁用#2.对话但#3.还在那里.
如何在测试设备上禁用自动填充?
testing android android-testing android-espresso android-autofill-manager
我想在我的应用程序中提供一些自动填充功能(电子邮件和密码),该功能完全使用 Jetpack compose 编写。我偶然发现了这篇博文和我都尝试过的演示代码。不幸的是,与文本字段交互时我无法收到任何弹出窗口。
修改我的代码后,我最终使用了提供的演示。一个最小的示例如下所示(ExplicitAutofillTypesDemo可组合项取自上面提到的演示代码,没有任何修改):
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ExplicitAutofillTypesDemo()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我缺少什么?我需要在其他地方启用它吗?官方撰写自动填充文档不是很有帮助。我只想在触摸文本字段时获得自动填充弹出窗口,如上面的博客文章中所示。
我没有在项目中使用 AutofillManager 的直接痕迹,但在崩溃分析中仍然遇到此崩溃。我们该如何处理这个问题?
崩溃日志-
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.os.Bundle.containsKey(java.lang.String)' on a null object reference.
android.view.autofill.AutofillManager.onAuthenticationResult AutofillManager.java:1798
android.app.Activity.dispatchActivityResult Activity.java:8674
android.app.ActivityThread.deliverResults ActivityThread.java:5850
android.app.ActivityThread.handleSendResult ActivityThread.java:5896
android.app.servertransaction.ActivityResultItem.execute ActivityResultItem.java:54
android.app.servertransaction.ActivityTransactionItem.execute ActivityTransactionItem.java:45
android.app.servertransaction.TransactionExecutor.executeCallbacks TransactionExecutor.java:135
android.app.servertransaction.TransactionExecutor.execute TransactionExecutor.java:95
android.app.ActivityThread$H.handleMessage ActivityThread.java:2434
android.os.Handler.dispatchMessage Handler.java:106
android.os.Looper.loopOnce Looper.java:226
android.os.Looper.loop Looper.java:313
android.app.ActivityThread.main ActivityThread.java:8633
java.lang.reflect.Method.invoke Method.java
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:567
com.android.internal.os.ZygoteInit.main ZygoteInit.java:1135
Run Code Online (Sandbox Code Playgroud) 我有自动填充管理器的错误,当我关注任何输入时 - 它会引发异常:
W/System.err: java.lang.NullPointerException: activityToken
W/System.err: at android.os.Parcel.readException(Parcel.java:2011)
W/System.err: at android.os.Parcel.readException(Parcel.java:1951)
at android.view.autofill.IAutoFillManager$Stub$Proxy.startSession(IAutoFillManager.java:397)
at android.view.autofill.AutofillManager.startSessionLocked(AutofillManager.java:1012) W/System.err: at android.view.autofill.AutofillManager.notifyViewEntered(AutofillManager.java:734) android.view.autofill.AutofillManager.notifyViewEntered(AutofillManager.java:706)
Run Code Online (Sandbox Code Playgroud)
我能够通过在基础活动中添加下一个代码来修复它onCreate():
public static void preventViewAutoFill(@NonNull Window window) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
final Method method;
try {
method = View.class.getMethod(AUTO_FILL_MANAGER_METHOD, Integer.TYPE);
} catch (Exception ignore) {
return;
}
if (method != null) {
try {
method.invoke(window.getDecorView(), IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
} catch (Exception ignore) {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题在除了输入内部的所有视图中都有WebView.当用户专注于WebView应用程序崩溃中的任何输入时,我有一个带有输入字段的WebView .
有没有办法在应用程序层或WebView端修复此问题?
应用程序定位25 API,最小16.
java android webview android-autofill-manager android-8.1-oreo
我已经使用 android webview 组件构建了一个小浏览器,并希望使用 Android AutoFill API 集成密码/凭据管理器支持。
我已经阅读了文档,但完全迷失了方向,并且找不到任何与 webviews 等复杂事物集成的示例。
javascript 方面对我来说不是问题,当用户在登录表单上选择输入(并且应该显示自动填充对话框)以及完成输入用户名和密码时,我已经触发了事件并提交页面(并且凭据应保存回密码管理器),但我正在努力理解这方面的 android 方面。
webview 似乎已经对此有了一些基本的支持,例如,如果我长按登录表单输入,并在上下文菜单中选择“自动填充”,我可以让它插入一些保存在凭证管理器中的值。问题是凭据已根据我的应用程序 ID 保存,而不是网站域,所以我的第一个问题是,当我请求自动填充菜单时,如何告诉 API 是针对特定字段类型的(例如用户名/密码)并属于特定网站,因此它知道要获取哪些凭据并可以稍后更新它们?这是我在选择登录表单中的字段时触发自动填充对话框的尝试。
更新:
当我在我的应用程序中创建一个静态 webview 时,自动填充会正确保存并提示表单上的凭据,并在每个站点正确保存它们但我需要它在 recyclerview 中的 webviews 中工作,并且由于某种原因,尽管共享,但它们没有相同的设置。我在 recyclerviews https://developer.android.com/guide/topics/text/autofill-optimize#recycle 中找到了有关自动填充的信息,但使用setAutofillId()似乎没有帮助,甚至这里的官方示例在我测试时似乎有点不可靠它在我的手机上https://github.com/android/input-samples/blob/master/AutofillFramework/Application/src/main/java/com/example/android/autofill/app/commoncases/RecyclerViewActivity.java
android autofill android-webview android-recyclerview android-autofill-manager
我有一个显示用户名用户界面的活动,输入该用户名并点击继续按钮后显示输入密码用户界面。输入密码并点击登录按钮后,完成当前活动并启动新活动。在我的设备上,我选择了 Google 自动填充服务,因此在第一个活动完成后,我想要“保存以供自动填充?” 对话框显示,但事实并非如此。我通过添加 autofillHints 来准备我的应用程序,而在我的活动中没有添加任何其他内容。我应该添加任何内容才能弹出对话框吗?
我正在使用 0.66(也尝试过 0.68rc4),但无法让 otp 自动填充在 Android 上运行。这是我拥有的组件
<Input
...
autoComplete="sms-otp"
...
/>
Run Code Online (Sandbox Code Playgroud)
我尝试了https://github.com/faizalshap/react-native-otp-verify库并且它有效,但我想看看我是否可以使用 RN 提供的内容(如果可能的话)。SMS 还附加了正确的 app_hash,因此能够使用上面的库,但不能使用开箱即用的解决方案。
有没有人有什么建议?
我们有一个带有登录/注册视图的应用程序。当用户创建新帐户或登录时,Android 自动填充框架会要求保存用户名和密码。
现在,一旦用户登录 - 我们有一个密码字段屏幕,用户可以通过输入当前密码和新密码来更改密码。但修改密码后,并没有要求更新密码。有没有办法强制Android自动填充框架更新密码?
使用软键盘API,我可以使用以下代码示例获取android EditText的属性
EditorInfo ei = getCurrentInputEditorInfo();
Log.i(TAG, "found field hintText = " + ei.hintText);
Run Code Online (Sandbox Code Playgroud)
但是如果从浏览器显示了输入字段,则上面的以下代码将不会检索提示文本。
如何获得在浏览器中显示的输入字段的属性?