Deshabilitar el servicio de llenado automático de Android O para una aplicación


Android O tiene la característica de soportar Autocompletar para los campos. ¿Hay alguna forma de que pueda desactivarlo para una aplicación específica. Es decir, quiero obligar a mi aplicación a no utilizar el servicio de autocompletar.

Es posible ?

Para bloquear el autocompletado de una actividad completa, use esto en onCreate() de la actividad:

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

¿Hay algún método mejor que este ?

Author: azizbekian, 2017-08-17

8 answers

Es posible ?

No que yo sepa. Ciertamente, nada está documentado.

¿Hay algún método mejor que este ?

No que yo sepa.

 3
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-17 10:49:41

Actualmente no hay una forma directa de deshabilitar el autocompletar para una aplicación completa, ya que la función de autocompletar es específica de la vista.

Todavía puede probar de esta manera y llamar a BaseActivity en todas partes.

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);
    }
}

También puede forzar el llenado automático de la solicitud de esta manera.

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

Nota: Por el momento la función de autocompletar solo está disponible en API 26 Android Oreo 8.0

Espero que esto ayude!

 16
Author: albeee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-06 19:25:46

Creo que la respuesta aceptada es incorrecta:

Así que tengo mi propia clase que es extiendeel android.apoyo.v7.widget.AppCompatEditText y todo lo que hice fue sobrescribir el siguiente método con el siguiente valor:

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

Ninguna otra solución funcionó, ni siquiera android:importantForAutofill="no".

getAutofillType () viene de la clase View, por lo que debería funcionar para cualquier otra clase como TextInputEditText también!

 12
Author: Karoly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-12 14:32:44

Me encontré con esto también. Resulta que el problema fue causado por establecer el texto de sugerencia en el EditText anidado dentro del TextInputLayout.

Investigué un poco y encontré esta pepita en las notas de la versión 26.0.0 Beta 2. Notas de la versión de Soporte Andorid Junio de 2017

TextInputLayout debe establecer pistas sobre onProvideAutofillStructure ()

Eso me llevó a intentar establecer la pista en el TextInputLayout en lugar del EditText anidado.

Esto resolvió el problema de estrellarse para mí. Ejemplo:

            <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>
 9
Author: Azethoth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-30 17:52:27

Parece ser un error que necesita ser corregido: https://issuetracker.google.com/issues/67675432
Mientras tanto, una solución alternativa por ahora es deshabilitar la función de autocompletar para todo el proyecto. Puede agregar en el archivo values-v26/styles.xml el siguiente estilo o puede editar su BaseEditTextStyle si está utilizando un estilo específico para sus vistas EditText.

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

Y en el archivo values-v26/themes.xml simplemente puede agregar al tema predeterminado que está utilizando en su aplicación los elementos editTextStyle y android:editTextStyle como sigue :

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

De esta manera puede aplicar estos cambios para todos sus EditTexts sin necesidad de cambiar sus archivos de diseño o Actividades (y más tarde puede eliminarlo fácilmente cuando se corrija el error).

 3
Author: Aymen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-20 16:45:43

Cree un estilo personalizado de EditText y establezca android:importantForAutofill en no.

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

Luego en tu tema de actividad establece este estilo para editTextStyle.

<item name="android:editTextStyle">@style/EditTextStyleWithoutAutoFill</item>
 2
Author: Nemanja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-05 21:35:52

Con referencia a Google issue tracker, se ha corregido.

Este se fija en Android 8.1

Si algún problema persiste, por favor informe a Google issue tracker se volverá a abrir para examinar.

 0
Author: Pragati Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-03 09:00:42

En sus atributos EditText agregue android:importantForAutofill="no" Esto debería ser una solución temporal y solo se aplicará a api 26+

 -1
Author: poke_champ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-10 06:38:19