我已经将我的应用程序配置为支持带有compileSdkVersion 26
的Android Oreo。我还为我的电话号码输入字段设置了android:autofillHints="phone"
。当我点击该字段时,我可以看到弹出"自动填充"。但是,当我点击"自动填充">时,会出现"内容无法自动填充">吐司,并在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模拟器设置中,我可以选择"使用Google自动填充"。使用Android Studio的"设计"选项卡,我添加了"Phone">类型EditText
,然后在XML元素中手动插入android:autofillHints="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" />
上述 Logcat 特性可以使用此 XML 进行观察。
我是 Android 框架工程师,负责 Autofill Framework 项目,所以我会回答一些问题:
- "无法自动填充内容">消息通常表示自动填充服务不知道如何自动填充屏幕。当您向应用添加自动填充支持时,使用您可以先控制的自动填充服务通常更容易,而不是像密码管理器这样的"真实"服务。如之前的回复所述,我们提供了一个可用于此目的的示例服务。
- 当您长按文本字段并选择自动填充时,您实际上是在"强制"另一个回复中提到的自动填充请求(即,在幕后文本字段正在调用AutofillManager.requestAutofill(((。如果自动填充服务知道如何自动填充屏幕,则无需执行此操作,因为一旦您聚焦输入字段,自动填充建议就会立即显示。
- 在这种情况下,您不需要设置importantForAutofill或调用AutofillManager.cancel((。
因此,我的建议是尝试使用示例自动填充服务实现来测试您的应用。最有可能的是,首次访问应用时,不会显示自动填充弹出窗口,因为该服务没有数据。但是,一旦你的应用触发了保存 UI(例如,在你手动输入电话号码并且活动完成之后(并点击"保存",该数据应该在下次启动活动时可用。
希望有帮助,
--菲 利 普
这很可能是问题所在 - 作为
as service for ComponentInfo{com.google.android.gms/com.google.android.gms.autofill.service.AutofillService} is already destroyed
确保数据可用
在某些特殊情况下,您需要采取 确保数据可用于 自动填充要保存的框架。例如,活动可以呈现 使用标准文本视图进行布局,但随后销毁布局和 将其替换为没有子视图的视图,例如 GLSurfaceView。在这种情况下,原始布局中的数据不可用于 框架。若要使数据可用于框架,应 在替换 AutofillManager 对象之前调用 commit(( 原始布局。
您需要在 Java 代码中修复其中一些问题。
添加IMPORTANT_FOR_AUTOFILL_AUTO并检查自动填充是否已启用((。
您可能需要管理 java 强制自动填充请求中的某些设置:
有时,您可能需要强制自动填充请求以响应用户操作。
public void eventHandler(View view) {
AutofillManager afm = context.getSystemService(AutofillManager.class);
if (afm != null) {
afm.requestAutofill();
}
}
您的手机上是否有实现自动填充服务的应用程序?我尝试使用"使用 Google 自动填充"服务,并且可以毫无问题地自动填充我的电话号码(使用运行 SDK 26 的模拟器(。您将需要一个服务部件来使自动填充正常工作。请参阅此示例。
获取最新的操作系统映像。下载并安装2017-09-21为我的Google Pixel XL设备提供的更新后,autofill
运行良好。因此,在XML中具有android:autofillHints="phone"
就足够了,无需进行其他更改即可启用自动填充功能。
内容无法自动填充">- 这是为我引起的,因为我不同意自动填充服务。 因此,进入奥利奥及更高版本的安卓设置,然后搜索 "自动填充" .找到你的服务(我的是默认的谷歌(,应该有一个提示同意它的服务。将其关闭,如果未出现,则将其切换。之后我能够使用自动填充。