J'ai configuré mon application pour prendre en charge Android Oreo avec compileSdkVersion 26
. J'ai également configuré Android:autofillHints="phone"
pour mon champ de saisie de numéro de téléphone. Lorsque je tape sur le champ, je peux voir "Remplissage automatique" apparaître. Cependant, lorsque je tape sur "Remplissage automatique" , "Le contenu ne peut pas être rempli automatiquement" toast apparaît et je vois la trace suivante dans 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
Comment dois-je résoudre ce problème? J'ai confirmé que le numéro de téléphone est configuré dans Paramètres> Système> Langues et saisie> Avancé> Assistance à la saisie> Service de remplissage automatique .
UPDATE avec un exemple de XML: Dans les paramètres de l'émulateur API 26, je peux sélectionner "Remplissage automatique avec Google". À l'aide de l'onglet Conception d'Android Studio, j'ai ajouté un "Téléphone" type EditText
, puis inséré manuellement Android:autofillHints="phone"
dans l'élément XML:
<EditText
Android:id="@+id/editText"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:ems="10"
Android:inputType="phone"
Android:autofillHints="phone" />
Les particularités de Logcat décrites ci-dessus peuvent être observées à l'aide de ce XML.
Obtenez la dernière image du système d'exploitation. Après avoir téléchargé et installé la mise à jour qui est devenue disponible le 21/09/2017 pour mon appareil Google Pixel XL, autofill
fonctionne parfaitement. Donc, il suffit d'avoir Android:autofillHints="phone"
en XML, aucune autre modification n'est requise pour activer la fonctionnalité de remplissage automatique.
Je suis l'ingénieur Android Frameworks qui dirige le projet Autofill Framework. Je vais donc répondre à quelques questions:
Par conséquent, ma recommandation est d'essayer d'utiliser l'exemple de mise en œuvre du service de remplissage automatique pour tester votre application en premier. Très probablement, la première fois que vous accédez à votre application, la fenêtre de saisie semi-automatique ne s'affiche pas car le service ne dispose pas de données. Mais une fois que votre application a déclenché l'interface utilisateur de sauvegarde (par exemple, après avoir entré manuellement le numéro de téléphone et l'activité terminée) et que vous avez appuyé sur Enregistrer, ces données devraient être disponibles au prochain lancement de l'activité.
J'espère que cela pourra aider,
- Felipe
Cela pourrait bien être le problème - comme
as service for ComponentInfo{com.google.Android.gms/com.google.Android.gms.autofill.service.AutofillService} is already destroyed
S'assurer que les données sont disponibles
Dans certains cas particuliers, vous devez prendre étapes supplémentaires pour s’assurer que les données sont disponibles pour le Cadre de saisie automatique à enregistrer. Par exemple, une activité peut présenter un mise en page avec des vues de texte standard, mais ensuite détruire la mise en page et. remplacez-le par un sans vue enfant, tel que GLSurfaceView.Dans ce cas, les données de la disposition d'origine ne sont pas disponibles pour le cadre. Pour rendre les données disponibles dans la structure, vous devez appelez commit () sur l'objet AutofillManager avant de remplacer le fichier mise en page originale.
Vous devrez résoudre certains de ces problèmes dans votre code Java.
Ajoutez IMPORTANT_FOR_AUTOFILL_AUTO et vérifiez que le remplissage automatique est activé () .
Vous devrez peut-être gérer certains paramètres dans Java forcer la demande de saisie automatique :
Parfois, vous devrez peut-être forcer une demande de remplissage automatique en réponse à une action de l'utilisateur. .../...
public void eventHandler(View view) {
AutofillManager afm = context.getSystemService(AutofillManager.class);
if (afm != null) {
afm.requestAutofill();
}
}
Le "contenu ne peut pas être rempli automatiquement" - cela a été causé par mon refus de la fonction de remplissage automatique. Alors, allez dans vos paramètres Android dans Oreo et au-dessus et recherchez "autofill". trouvez votre service (le mien était googles par défaut) et il devrait y avoir une invite pour accepter son service. désactiver et un si elle ne semble pas. Ensuite, j'ai pu utiliser le remplissage automatique.
Avez-vous une application sur votre téléphone qui implémente un service de remplissage automatique? Je l'ai essayé avec le service "Remplissage automatique avec Google" et j'ai pu remplir mon numéro de téléphone sans problèmes (avec l'émulateur utilisant le SDK 26). Vous aurez besoin d’une partie service pour que le remplissage automatique fonctionne. Voir cet exemple .