Android Oreo with compileSdkVersion 26
をサポートするようにアプリを構成しました。電話番号入力フィールドにもAndroid:autofillHints="phone"
を設定しました。フィールドをタップすると、 "Autofill"ポップアップが表示されますが、"Autofill"をタップすると、"コンテンツを自動入力できません"トーストが表示されます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を使用して観察できます。
最新のOSイメージを取得します。 2017-09-21にGooglePixel XLデバイスで利用可能になったアップデートをダウンロードしてインストールした後、autofill
は完全に機能します。したがって、XMLにAndroid:autofillHints="phone"
があれば十分であり、自動入力機能を有効にするために他の変更は必要ありません。
私はAutofillFrameworkプロジェクトを率いるAndroid Frameworksエンジニアなので、いくつかの質問に答えます。
したがって、最初にサンプルの自動入力サービスの実装を使用してアプリをテストすることをお勧めします。ほとんどの場合、アプリに初めてアクセスしたときに、サービスにデータがないため、自動入力ポップアップは表示されません。ただし、アプリが保存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 を追加し、自動入力 isenabled() であることを確認します。
Java 自動入力リクエストを強制する :内のいくつかの設定を管理する必要がある場合があります。
場合によっては、ユーザーの操作に応じて自動入力リクエストを強制的に実行する必要があります。 ... /.。
public void eventHandler(View view) {
AutofillManager afm = context.getSystemService(AutofillManager.class);
if (afm != null) {
afm.requestAutofill();
}
}
「コンテンツを自動入力できません」-これは、自動入力サービスに同意しなかったために発生しました。したがって、Oreo以上のAndroid設定に移動し、「自動入力」を検索します。サービスを見つけます(私の場合はデフォルトのグーグルでした)。サービスに同意するためのプロンプトが表示されます。オフに切り替えます。表示されない場合は1つ。その後、自動入力を使用できるようになりました。
オートフィルサービスを実装するアプリが携帯電話にありますか? 「AutofillwithGoogle」サービスで試してみたところ、問題なく電話番号を自動入力できました(SDK 26を実行しているエミュレーターを使用)。自動入力を機能させるには、サービスパーツが必要になります。 この例 を参照してください。