web-dev-qa-db-ja.com

アプリケーションのAndroid O自動入力サービスを無効にする

Android Oには、フィールドで 自動入力 をサポートする機能があります。特定のアプリケーションで無効にする方法はありますか。つまり、アプリケーションが自動入力サービスを使用しないように強制します。

出来ますか ?

アクティビティ全体の自動入力をブロックするには、アクティビティのonCreate()でこれを使用します。

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

これより良い方法はありますか?

32
jgm

出来ますか ?

私が知っていることではありません。確かに、何も文書化されていません。

これより良い方法はありますか?

私が知っていることではありません。

4
CommonsWare

現在、自動入力機能はView specific。であるため、アプリケーション全体の自動入力を無効にする直接的な方法はありません。

それでもこの方法を試して、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);
    }
}

この方法でリクエストの自動入力を強制することもできます。

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

注:現時点では、自動入力機能はAPI 26 Android Oreo 8.でのみ利用可能です

お役に立てれば!

22
albeee

私は受け入れられた答えが間違っていると信じています:

extends theAndroid.support.v7.widget.AppCompatEditTextである独自のクラスがあり、上書きしただけです次の値を持つ次のメソッド:

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

android:importantForAutofill = "no"でさえ、他のソリューションは機能しませんでした。

getAutofillType()はViewクラスに由来するため、TextInputEditTextなどの他のすべてのクラスでも機能するはずです!

17
Karoly

私もこれに遭遇しました。この問題は、TextInputLayout内にネストされたEditTextにヒントテキストを設定することによって発生したことが判明しています。

26.0.0 Beta 2リリースノートで掘り下げてこのナゲットを見つけました。 2017年6月のAndoridサポートリリースノート

TextInputLayoutはonProvideAutofillStructure()にヒントを設定する必要があります

そこで、ネストされたEditTextの代わりにTextInputLayoutにヒントを設定してみました。

これにより、クラッシュの問題が解決しました。例:

            <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

修正が必要なバグのようです: https://issuetracker.google.com/issues/67675432
当面の回避策は、プロジェクト全体でオートフィル機能を無効にすることです。 values-v26/styles.xmlファイルに次のスタイルを追加するか、EditTextビューに特定のスタイルを使用している場合はBaseEditTextStyleを編集できます。

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

values-v26/themes.xmlファイルでは、アプリで使用しているデフォルトのテーマに、次のようにeditTextStyleAndroid:editTextStyleの項目を追加するだけです。

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

このようにして、レイアウトファイルやアクティビティを変更せずに、EditTextにallにこの変更を適用できます(後でバグが発生したときに簡単に削除できます)固定されています)。

4
Aymen

カスタムEditTextスタイルを作成し、Android:importantForAutofillnoに設定します。

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

次に、アクティビティテーマで、このスタイルをeditTextStyleに設定します。

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

EditText属性にAndroid:importantForAutofill="no"を追加します。これは一時的な修正であり、API 26以降にのみ適用されます

0
poke_champ

Google issue tracker を参照して、修正されました。

これはAndroid 8.1で修正されました

問題が解決しない場合は、 Google issue tracker で報告してください。調査のために再度開きます。

0
Prags