Disabling Android O auto-fill service for an application

后端 未结 10 1708
死守一世寂寞
死守一世寂寞 2020-11-27 05:13

Android O has the feature to support Auto-filling for fields. Is there any way I can disable it for a specific application. That is I want to force my application not to use

相关标签:
10条回答
  • 2020-11-27 05:37

    I ran into this too. It turns out the issue was caused by setting the hint text on the EditText nested inside the TextInputLayout.

    I did some digging and found this nugget in the 26.0.0 Beta 2 release notes. Andorid Support Release Notes June 2017

    TextInputLayout must set hints on onProvideAutofillStructure()

    That led me to try setting the hint on the TextInputLayout instead of the nested EditText.

    This resolved the crashing issue for me. Example:

                <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>
    
    0 讨论(0)
  • 2020-11-27 05:38

    Currently there is no direct way to disable the autofill for an entire application, since the autofill feature is View specific.

    You can still try this way and call BaseActivity everywhere.

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

    You can also force request autofill this way.

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

    Note: At the moment autofill feature is only available in API 26 Android Oreo 8.0

    Hope this helps!

    0 讨论(0)
  • 2020-11-27 05:43

    Create custom EditText style and set android:importantForAutofill to no.

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

    Then in your activity theme set this style for editTextStyle.

    <item name="android:editTextStyle">@style/EditTextStyleWithoutAutoFill</item>
    
    0 讨论(0)
  • 2020-11-27 05:46

    In my case, our app targets sdk version 21 but newer devices (26+) were still popping up the autocomplete. Pretty big problem if the app runs on devices that are shared between people. Using just android:importantForAutofill="no" did not work for me.

    The only solution that I found to work in my case was:

    <EditText
        android:importantForAutofill="no"
        tools:targetApi="o"
        android:autofillHints="AUTOFILL_HINT_SMS_OTP" ...
    

    The reason I added android:autofillHints="AUTOFILL_HINT_SMS_OTP" was because if you long pressed on the EditText it would still bring up autofill. Basically I told the field's autofill that it is waiting for a text message that will never be sent. Bit of a hack, I know...

    Note: you may have to add xmlns:tools="http://schemas.android.com/tools" to your schemas' if it is not there already.

    0 讨论(0)
  • 2020-11-27 05:47

    With reference to Google issue tracker, it has been fixed.

    This is fixed on Android 8.1

    If any issue persists, please report at Google issue tracker they will re-open to examine.

    0 讨论(0)
  • 2020-11-27 05:48

    I believe the accepted answer is incorrect:

    So I have my own class which is extends the android.support.v7.widget.AppCompatEditText and all I did is overwrote the following method with the following value:

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

    no other solutions worked, not even android:importantForAutofill="no".

    getAutofillType() comes from the View class, so it should work for every other class such as TextInputEditText too!

    0 讨论(0)
提交回复
热议问题