表示 - Androidオートフィル:dispatchProvideAutofillStructure()がレイアウトされていません




アクション バー の 表示 (4)

「コンテンツは自動入力できません」 - これは私がオートフィルサービスに同意しなかったために引き起こされたものです。 だからOreo以上のあなたのアンドロイド設定に行き、 "オートフィル"を検索してください。 あなたのサービスを見つけてください(私のものはデフォルトのグーグルでした)、そのサービスに同意するよう促す必要があります。 それを表示しない場合は1つと1つをトグルします。 その後、私はオートフィルを使用することができました。

私はcompileSdkVersion 26 Android Oreoをサポートするようにアプリを設定しcompileSdkVersion 26 。 私はまた、電話番号入力フィールドに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の[デザイン]タブを使用して、 「電話」タイプの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" />

このXMLを使用すると、上記のLogcatの特性を見ることができます。


これは問題になるかもしれません。

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を追加し、自動isenabled()ていることを確認してisenabled()

Java内のいくつかの設定を管理する必要があるかもしれません。

場合によっては、ユーザー操作に応答して自動入力要求を強制する必要が生じる場合があります。 ... / ...

public void eventHandler(View view) {
    AutofillManager afm = context.getSystemService(AutofillManager.class);
    if (afm != null) {
        afm.requestAutofill();
    }
}

最新のOSイメージを入手してください。 Google Pixel XLデバイスの2017-09-21で使用可能になったアップデートをダウンロードしてインストールすると、 autofillが完全に機能します。 したがって、XMLにandroid:autofillHints="phone"ば十分ですが、自動入力機能を有効にするために他の変更は必要ありません。


私はAutofill FrameworkプロジェクトをリードするAndroid Frameworksのエンジニアですから、いくつかの質問にお答えします:

  • 「コンテンツは自動入力できません」というメッセージは、通常、自動入力サービスが画面の自動入力方法を知らないということを意味します。 アプリにオートフィルサポートを追加するときは、パスワードマネージャのような「本当の」サービスではなく、最初に制御できるオートフィルサービスを使用するほうが簡単です。 以前の返信で述べたように、この目的で使用できるサンプルサービスを提供します
  • テキストフィールドを長押ししてAUTOFILLを選択すると、実際には、別の返信(テキストフィールドがAutofillManager.requestAutofill() )を呼び出している舞台裏で述べたように、自動入力要求を強制的に強制しています。 オートフィルサービスが画面を自動入力する方法を知っている場合は、入力フィールドにフォーカスを合わせるとすぐに自動入力候補が表示されるため、画面を自動入力する方法はわかりません。
  • あなたのケースではimportantForAutofillを設定したり、 AutofillManager.cancel()を呼び出す必要はありません。

だから、私のお勧めは、サンプルのオートフィルサービス実装を使って、まずあなたのアプリをテストしようとすることです。 ほとんどの場合、初めてアプリケーションにアクセスすると、サービスにデータがないため、自動入力ポップアップは表示されません。 しかし、アプリケーションが保存UIをトリガーすると(たとえば、電話番号とアクティビティが手動で入力された後など)、保存をタップすると、そのデータは次にアクティビティを起動したときに利用できるようになります。

希望は、

- フェリペ





android-8.0-oreo