2017-08-11 53 views
15

Skonfigurowałem moją aplikację do obsługi Androida Oreo z compileSdkVersion 26. Ustawiłem też android:autofillHints="phone" dla pola wprowadzania numeru telefonu. Kiedy klikam na polu, widzę "Wypełnij autouzupełnianie" pojawiające się. Jednak, kiedy dotknąć „Autofill”, „Zawartość nie może być automatycznie uzupeĹ,nianych” pojawia tosty i widzę następujący ślad w LogCat:Automatyczne autouzupełnianie: dispatchProvideAutofillStructure() nie rozplanowana

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 

Jak mam rozwiązać ten problem? Potwierdziłem, że mam skonfigurowany numer telefonu w ustawieniach Ustawienia> System> Języki & wejście> Zaawansowane> Pomoc dotycząca wprowadzania danych> Usługa automatycznego uzupełniania.

AKTUALIZACJA z przykładowym XML: w ustawieniach emulatora API 26 mogę wybrać opcję "Wypełnij automatycznie przez Google". Za pomocą karty Design Android Studio I dodaje "komórkowe" typu EditText, a następnie wstawiony android:autofillHints="phone" w elemencie XML: osobliwości

<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 opisane powyżej może być obserwowana przy użyciu tego XML.

+2

Podaj odpowiedni kod java i xml, proszę –

+0

Nie ma nic szczególnego w XML lub kodzie innym niż nowo dodane 'android: autofillHints =" phone "'. Spróbuję znaleźć czas na opracowanie. Jednak autouzupełnianie za pomocą Google wydaje się być nieco niedojrzałym elementem w obecnym statusie: https://plus.google.com/+JuusoOhtonen/posts/4kzMk5LUGLW –

+0

cóż, nie dostarczyłeś [mcve], które pomogłoby nam pomóc ty. Wrzuciłeś na to 250 nagród - zmarnujesz go, jeśli nie pokażesz więcej. –

Odpowiedz

0

Pobierz najnowszą obraz systemu operacyjnego. Po pobraniu i zainstalowaniu aktualizacji, która stała się dostępna w dniu 2017-09-21 dla mojego urządzenia Google Pixel XL, funkcja autofill działa idealnie. Zatem w języku XML musi być android:autofillHints="phone", nie są wymagane żadne inne zmiany, aby włączyć funkcję autouzupełniania.

0

Czy masz na telefonie aplikację, która implementuje usługę autouzupełniania? Próbowałem go z usługą "Wypełnij automatycznie Google" i mój numer telefonu mógł być automatycznie wypełniony bez problemów (emulator działa z SDK 26). Będziesz potrzebował części serwisowej, aby uzyskać pracę autouzupełniania. Zobacz this example.

+0

Dzięki za podpowiedź na temat używania emulatora. Na tej podstawie mogę zaktualizować moje pytanie. –

1

To może okazać się problemem - jak

as service for ComponentInfo{com.google.android.gms/com.google.android.gms.autofill.service.AutofillService} is already destroyed 

Ensuring data is available
W niektórych szczególnych przypadkach, trzeba wziąć dodatkowe kroki, aby upewnić się, że dane są dostępne dla Autofill Ramy do zapisania. Na przykład działanie może przedstawiać układ ze standardowymi widokami tekstowymi, ale następnie niszczy układ i zastępuje go bez widoków podrzędnych, takich jak GLSurfaceView.

W tym przypadku dane w oryginalnym układzie nie są dostępne w ramach . Aby udostępnić dane dla architektury, należy przed wywołaniem zadzwonić pod numer commit() w obiekcie AutofillManager przed zastąpieniem oryginalnego layoutu .

Będziesz musiał rozwiązać niektóre z tych problemów w kodzie Java.

Dodaj IMPORTANT_FOR_AUTOFILL_AUTO i sprawdź, czy autouzupełnianie isenabled().

Może trzeba zarządzać niektóre ustawienia w java force the Autofill request:

Czasami trzeba wymusić prośbę autouzupełniania, aby wystąpić w odpowiedzi na działania użytkownika. .../...

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

zapytaj mnie, czy potrzebujesz więcej informacji. –

+0

Dzięki, zrobiłem pierwsze zdjęcie, ale jeszcze nie udało mi się poprawić kodu. Będę kontynuować. –

+0

Hmm, po aktualizacji emulatora do najnowszej wersji 8.0, autouzupełnianie zaczęło działać bez żadnych dodatkowych zmian kodu. Zastanawiam się, czy jest to aktualizacja wkrótce do rzeczywistych urządzeń, jak również ... –

6

Jestem inżynierem Android Konstrukcje liderem projektu autouzupełnianie ramową, więc będę odpowiedzieć na kilka pytań:

  • „Zawartość nie może być automatycznie uzupeĹ,nianych” wiadomość oznacza zwykle Usługa autouzupełniania nie wie, jak automatycznie wypełnić zawartość ekranu. Dodając obsługę autouzupełniania do swojej aplikacji, często łatwiej jest użyć usługi autouzupełniania, którą możesz najpierw kontrolować, a nie "prawdziwej" usługi, takiej jak menedżer haseł. Jak wspomniano w poprzedniej odpowiedzi, zapewniamy sample service, który można wykorzystać do tego celu.
  • Po długim prasie pole tekstowe i wybierz Autouzupełnianie, jesteś w rzeczywistości „zmuszając” żądanie autouzupełniania jak wspomniano w innym post (czyli za kulisami pole tekstowe dzwoni AutofillManager.requestAutofill()). Jeśli usługa autouzupełniania wie, jak automatycznie wypełnić zawartość ekranu, nie powinieneś tego robić, ponieważ sugestie autouzupełniania pojawiałyby się natychmiast po ustawieniu pola wprowadzania.
  • Nie powinieneś potrzebować ustawić importantForAutofill lub zadzwonić pod numer AutofillManager.cancel() w twoim przypadku.

Tak więc, moim zaleceniem jest próba skorzystania z przykładowej implementacji usługi autouzupełniania, aby najpierw przetestować swoją aplikację. Najprawdopodobniej przy pierwszym uruchomieniu aplikacji wyskakujące okno autouzupełniania nie będzie wyświetlane, ponieważ usługa nie zawiera danych. Ale gdy aplikacja uruchomi interfejs użytkownika do zapisu (na przykład po ręcznym wprowadzeniu numeru telefonu i zakończeniu aktywności) i po dotknięciu opcji zapisu, dane te będą dostępne po następnym uruchomieniu działania.

nadzieję, że pomoże,

- Felipe

+0

Moja aplikacja działa różnie w sprawie zaktualizowanego Nexus 5X API 26 emulator, na którym autofill działa idealnie (nawet bez długiego prasy). OTOH, Google Nexus XL, prawdziwe urządzenie, z obrazem programu w wersji beta * nie * zapewnia autouzupełniania dla tej samej aplikacji, nawet po długim naciśnięciu. Czy nadchodzi aktualizacja dla programu beta (jak się wydaje, że była jedna dla emulatora)? –

+0

Aktualizacja: po dzisiejszej aktualizacji mojego urządzenia Google Pixel XL funkcja automatycznego autouzupełniania działa idealnie (bez dodatkowych zmian kodu)! –

0

"Zawartość nie może być automatycznie wypełniona" - zostało to spowodowane, ponieważ nie wyraziłem zgody na usługę automatycznego wypełniania. Więc przejdź do ustawień Androida w Oreo i powyżej i wyszukaj "autouzupełnianie". znajdź swoją usługę (moja była domyślną wersją Google) i powinien pojawić się monit o wyrażenie zgody na jej usługi. wyłącz to i jedno, jeśli się nie pojawi. Potem mogłem użyć autouzupełniania.