Android autofill:未布局DispatchProviderAutoFillStructure()
我已将我的应用程序配置为支持Android Oreo和CompileSDK版本26。我还为我的电话号码输入字段设置了Android autofill:未布局DispatchProviderAutoFillStructure(),android,android-logcat,autofill,android-8.0-oreo,Android,Android Logcat,Autofill,Android 8.0 Oreo,我已将我的应用程序配置为支持Android Oreo和CompileSDK版本26。我还为我的电话号码输入字段设置了android:autofillHints=“phone”。当我点击字段时,我可以看到“自动填充”弹出。但是,当我点击“自动填充”时,“内容无法自动填充”toast出现,我在logcat中看到以下跟踪: RemoteFillService Not handling { when=-3ms what=3 target=com.android.internal.os.HandlerC
android:autofillHints=“phone”
。当我点击字段时,我可以看到“自动填充”弹出。但是,当我点击“自动填充”时,“内容无法自动填充”toast出现,我在logcat中看到以下跟踪:
RemoteFillService Not handling { when=-3ms what=3 target=com.android.internal.os.HandlerCaller$MyHandler } as service for ComponentInfo{com.google.android.gms/com.google.android.gms.autofill.service.AutofillService} is already destroyed
View dispatchProvideAutofillStructure(): not laid out, ignoring
我该如何解决这个问题?我已确认已在设置>系统>语言和输入>高级>输入帮助>自动填充服务中配置了电话号码
使用示例XML更新:在API 26 emulator设置中,我可以选择“使用Google自动填充”。使用Android Studio的设计选项卡,我添加了一个“Phone”类型EditText
,然后在XML元素中手动插入Android:autofillhits=“Phone”
:
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="phone"
android:autofillHints="phone" />
使用此XML可以观察上述Logcat特性。您的手机上是否有实现自动填充服务的应用程序?我使用“谷歌自动填充”服务进行了尝试,可以毫无问题地自动填充我的电话号码(使用运行SDK 26的emulator)。您将需要一个服务部件,以使自动填充正常工作。请参阅。这很可能就是问题所在-正如
as service for ComponentInfo{com.google.android.gms/com.google.android.gms.autofill.service.AutofillService} is already destroyed
在某些特殊情况下,您需要 确保数据可供用户使用的附加步骤 要保存的自动填充框架。例如,一个活动可以呈现一个 使用标准文本视图进行布局,然后销毁布局和 将其替换为一个没有子视图的视图,例如GLSurfaceView 在这种情况下,原始布局中的数据对用户不可用 框架要使数据可用于框架,您应该 在替换前调用AutofillManager对象 原始布局 您需要在java代码中修复其中一些问题 添加并检查自动填充 您可能需要管理java中的一些设置: 有时,您可能需要强制执行自动填充请求以响应用户操作
我是Android框架工程师,负责Autofill框架项目,因此我将回答一些问题:
- “内容不能自动填充”消息通常意味着自动填充服务不知道如何自动填充屏幕。当您向应用程序添加自动填充支持时,通常更容易使用您可以首先控制的自动填充服务,而不是像密码管理器这样的“真正”服务。如前一答复所述,我们提供了一个可用于此目的的
- 当您长按文本字段并选择AUTOFILL时,实际上您正在“强制”另一个答复中提到的自动填充请求(即,在幕后,文本字段正在调用AutofillManager.requestAutofill())。如果自动填充服务知道如何自动填充屏幕,则不需要这样做,因为一旦您聚焦输入字段,自动填充建议将立即显示
- 在本例中,您不需要设置importantForAutofill或调用AutofillManager.cancel()
--Felipe获取最新的操作系统映像。下载并安装了2017年9月21日针对我的Google Pixel XL设备提供的更新后,
autofill
运行良好。因此,只要有XML格式的android:AutoFillHitts=“phone”就足够了,启用自动填充功能不需要其他更改。无法自动填充内容“-这是因为我不同意自动填充服务。因此,进入Oreo和更高版本的android设置,搜索“自动填充”。找到你的服务(我的是默认的谷歌),应该会有一个同意其服务的提示。将其关闭,如果未显示,则选择一个。之后,我可以使用自动填充 除了新添加的android:autofillHints=“phone”
之外,XML或代码中没有什么特别之处。我会尽量找时间详细说明。然而,谷歌的自动填充功能在其目前的状态下似乎有点不成熟:第一:不,我没有给它250美元的奖金。第二:正如我在Google Plus帖子中所展示的,我目前甚至无法选择“使用Google自动填充”,因此我真的无法提供可验证的示例(因为我目前无法自己验证)。我可以在API 26 emulator上使用“使用Google自动填充”。基于这一点,我更新了这个问题,加入了一个XML元素。现在正在使用1.9.17更新:在我的Google Pixel XL设备今天的更新之后,autofill
可以完美地工作(没有额外的代码更改)!感谢您提供有关使用emulator的提示。基于此,我可以更新我的问题。谢谢,我拍了第一张照片,但我还不能修复我的代码。我将继续。嗯,在将emulator更新到最新的8.0之后,autofill开始工作,没有任何额外的代码更改。我想知道是否真的设备很快也会有更新……我的应用程序在更新的Nexus 5X API 26 emulator上的工作方式有所不同,autofill在该模拟器上工作得非常完美(即使不用长时间按下)。OTOH,Google Nexus XL,一款带有测试版程序图像的真实设备,不为同一个应用程序提供自动填充功能,即使长时间按下也不行。测试版程序是否有更新(仿真器似乎也有更新)?更新:在我的Google Pixel XL设备今天更新后,autofill
工作正常(没有额外的代码更改)@费利佩·勒梅,你能不能请他
public void eventHandler(View view) {
AutofillManager afm = context.getSystemService(AutofillManager.class);
if (afm != null) {
afm.requestAutofill();
}
}