wake-up-neo.net

Deaktivieren des Auto-Fill-Service von Android O für eine Anwendung

Android O bietet die Funktion zur Unterstützung von Automatisch ausfüllen für Felder. Gibt es eine Möglichkeit, sie für eine bestimmte Anwendung zu deaktivieren. Das heißt, ich möchte meine Anwendung dazu zwingen, den Auto-Fill-Dienst nicht zu verwenden.

Ist es möglich ?

Um das automatische Ausfüllen einer gesamten Aktivität zu blockieren, verwenden Sie dies in onCreate () der Aktivität:

getWindow()
  .getDecorView()
  .setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);

Gibt es eine bessere Methode als diese?

26
jgm

Ist es möglich ?

Nicht dass ich wüsste. Sicher ist nichts dokumentiert.

Gibt es eine bessere Methode als diese?

Nicht dass ich wüsste.

4
CommonsWare

Derzeit gibt es keine direkte Möglichkeit, das automatische Ausfüllen für eine gesamte Anwendung zu deaktivieren, da das automatische Ausfüllen View-spezifisch ist. 

Sie können dies immer noch versuchen und BaseActivity überall aufrufen.

public class BaseActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       disableAutoFill();
    }

    @TargetApi(Build.VERSION_CODES.O)
    private void disableAutoFill() { 
        getWindow().getDecorView().setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
    }
}

Sie können das automatische Anfordern von Anfragen auch auf diese Weise erzwingen.

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

Hinweis: Derzeit ist die Funktion zum automatischen Ausfüllen nur in API 26 verfügbar. Android Oreo 8.0

Hoffe das hilft!

20
albeee

Ich glaube die akzeptierte Antwort ist falsch:

Ich habe also eine eigene Klasse, die erweitert Android.support.v7.widget.AppCompatEditText ist und alles, was ich getan habe, die folgende Methode mit folgendem Wert überschreibt: 

@Override
public int getAutofillType() {
    return AUTOFILL_TYPE_NONE;
}

keine andere Lösung funktionierte, nicht einmal Android: importantForAutofill = "no".

getAutofillType () stammt aus der View-Klasse, daher sollte es auch für jede andere Klasse wie TextInputEditText funktionieren!

13
Karoly

Ich bin auch darauf gestoßen. Es stellte sich heraus, dass das Problem durch das Festlegen des Hinweistexts für den im TextInputLayout verschachtelten EditText verursacht wurde.

Ich habe ein bisschen gegraben und dieses Nugget in den Versionshinweisen zu Beta 2 26.0.0 gefunden. Andorid Support Versionshinweise Juni 2017

TextInputLayout muss Hinweise auf onProvideAutofillStructure () setzen

Das hat mich dazu gebracht, den Hinweis auf das TextInputLayout anstelle des verschachtelten EditText zu setzen.

Dies löste das Absturzproblem für mich. Beispiel:

            <Android.support.design.widget.TextInputLayout
                Android:id="@+id/textInputLayout"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:hint="Some Hint Text"
                Android.support.design:hintAnimationEnabled="true"
                Android.support.design:hintEnabled="true"
                Android.support.design:layout_marginTop="16dp">

                <Android.support.design.widget.TextInputEditText
                    Android:id="@+id/editText"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"/>

            </Android.support.design.widget.TextInputLayout>
11
Azethoth

Scheint ein Fehler zu sein, der behoben werden muss: https://issuetracker.google.com/issues/67675432
In der Zwischenzeit ist es eine vorläufige Lösung, die AutoFill-Funktion für das gesamte Projekt zu deaktivieren. Sie können der Datei values-v26/styles.xml den folgenden Stil hinzufügen oder den BaseEditTextStyle bearbeiten, wenn Sie einen bestimmten Stil für Ihre EditText-Ansichten verwenden.

<style name="App_EditTextStyle" parent="@Android:style/Widget.EditText">
<item name="Android:importantForAutofill">noExcludeDescendants</item>
</style>

und in der values-v26/themes.xml-Datei können Sie dem Standarddesign, das Sie in Ihrer App verwenden, die Elemente editTextStyle und Android:editTextStyle wie folgt hinzufügen:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="Android:editTextStyle">@style/App_EditTextStyle</item>
<item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

auf diese Weise können Sie diese Änderungen für all Ihrer EditTexts anwenden, ohne Ihre Layoutdateien oder Aktivitäten ändern zu müssen (und Sie können sie später leicht entfernen, wenn der Fehler behoben ist).

4
Aymen

Erstellen Sie einen benutzerdefinierten EditText-Stil und setzen Sie Android:importantForAutofill auf no.

<style name="EditTextStyleWithoutAutoFill" parent="Widget.AppCompat.EditText">
    <item name="Android:importantForAutofill">no</item>
</style>

Legen Sie dann in Ihrem Aktivitätsthema diesen Stil für editTextStyle fest.

<item name="Android:editTextStyle">@style/EditTextStyleWithoutAutoFill</item>
2
Nemanja

Fügen Sie in Ihren EditText-Attributen Android:importantForAutofill="no" Dies sollte eine vorübergehende Korrektur sein und gilt nur für Api 26+

0
poke_champ

In Bezug auf Google Problem-Tracker wurde es behoben.

Dies ist in Android 8.1 behoben

Wenn ein Problem weiterhin besteht, melden Sie sich unter Google Problem-Tracker es wird erneut geöffnet, um es zu überprüfen.

0
Prags