Android autofillhints что это

«Missing autofillHints attribute»

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

3 Answers 3

To your EditText and warning will disappear.

You do this using the new android:autofillHints attribute to tell autofill what type of content you expect, and android:importantForAutofill to tell autofill which views you want (or do not want) to be filled.

Edit:

You can however set:

To the component to tell it is not important to fill and get rid of the error.

If you don’t want autofillHints

Should use android:importantForAutofill=no if you don’t want autofill hint

minSdk android:importantForAutofill then tools:targetApi to make IDE don’t this warning about API level

If you want autofillHints

Autofill service enable by default even if we don’t set autofillHints attribute. specify an autofillHints will help autofill service work better like our expection. see documents here

minSdk>=26

Just need to add android:autofillHints=»» (eg: «android:autofillHints=»password» ) (use constant from here)

minSdk tools:targetApi to make IDE don’t this warning

Note

autofillHints and importantForAutofill only used in API 26 and higher but we still can use it in API tool. just use to make IDE don’t warning, it will not effect anything when application running so tools:ignore=»Autofill don’t help you hide autofill hint

Источник

Как использовать фреймворк Autofill в Android Oreo

Автоматическое заполнение форм поддерживается браузерами уже много лет. Большинство из нас используют его всё время, поскольку оно незаменимо в таких задачах, заполнение регистрационных данных или завершение процесса оформления заказа.

Новая версия Android, Android 8.0 Oreo, обеспечивает аналогичный функционал для приложений. Другими словами, Android теперь может помогать пользователя заполнять формы в приложениях, которые установлены на устройстве. Это была долгожданная функция, потому что набирать на виртуальной клавиатуре, как правило, довольно сложно.

Как разработчик приложений, вы можете использовать фреймворк Autofill для создания собственного настраиваемого сервиса автозаполнения, который будет решать, как заполнять поля в приложении.

Необходимые условия

Чтобы выполнить все этапы в этой статье, вам понадобится:

1. Создаём новый проект

Запустите Android Studio и создайте новый проект с пустой активностью. Не забудьте в целевом SDK выбрать API 26.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

Для реализации нам понадобятся несколько виджетов из библиотеки дизайна, поэтому в файл build.gradle модуля app добавим следующую зависимость.

Наконец нажмите Sync now для обновления проекта.

2. Создаём активность с настройками

В этой статье мы создали приложение, содержащее очень простой сервис автозаполнения, который предназначен только для тех полей ввода, где пользователь должен ввести адрес электронной почты. Поскольку почти любое приложение в Google Play сегодня запрашивает адрес электронной почты, этот сервис может быть весьма полезен.

Наш сервис, очевидно, должен знать, что такое адрес электронной почты. Поэтому давайте создадим активность, в которой пользователь сможет ввести и сохранить два адреса.

Шаг 1. Создание разметки

Как и следовало ожидать, разметка активности будет содержать два виджета EditText, в которые пользователь может ввести адреса электронной почты. Если вы хотите придерживаться принципов Material Design, то размещение этих виджетов внутри контейнеров TextInputLayout является хорошей идеей.

Кроме того, в разметке должна быть кнопка, при нажатии на которую пользователь будет сохранять введённые адреса.

Вы можете размещать виджеты в любом месте, однако сейчас я предлагаю вам разместить их в LinearLayout с вертикальной ориентацией.

В приведенном выше коде можно увидеть, что у компонента Button в атрибуте onClick указан метод. Нажмите на жёлтую лампочку рядом с этим атрибутом в Android Studio, чтобы создать заглушку этого метода в классе соответствующей активности.

Шаг 2. Сохранение email адресов

Мы будем использовать файл общих предпочтений EMAIL_STORAGE, чтобы сохранить наши данные. Вы можете использовать метод getSharedPreferences() вашей активности для доступа к файлу. Кроме того, чтобы иметь возможность писать в файл, вы должны вызвать его метод edit(), который генерирует объект SharedPreferences.Editor.

Соответственно, добавьте следующий код внутри метода saveEmailAddresses():

Чтобы получить адреса электронной почты, введенные пользователем в EditText, вам сначала нужно получить ссылки на них с помощью метода findViewById(), а затем вызвать их методы getText().

На этом этапе вы можете вызвать метод putString() редактора, чтобы добавить адреса электронной почты в файл настроек в виде двух пар значений ключа. После этого не забудьте вызвать метод commit(), чтобы ваши изменения сохранились.

Шаг 3. Создание файла метаданных

Активность настроек, которую мы создали на предыдущем шаге, в настоящее время является обычной активностью. Чтобы платформа Android знала, что это активность настроек для службы автозаполнения, мы должны создать файл метаданных, говорящий об этом.

Создайте новый XML-файл с именем email_address_filler.xml в папке res/xml проекта. Внутри добавьте тег и установите значение его атрибута attributeActivity для имени вашей активности.

Теперь вы можете запустить приложение, ввести два адреса электронной почты и нажать кнопку «Сохранить», чтобы сохранить их.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

3. Создаём сервис автозаполнения

Любой класс, который расширяет абстрактный класс AutoFillService, может служить для автозаполнения. Поэтому начните с создания нового класса Java с помощью File — New — Java Class. В появившемся диалоговом окне назовите класс EmailAddressFiller и убедитесь, что вы установили значение поля Superclass в AutofillService.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

Шаг 1. Анализ иерархии View

Служба автозаполнения должна анализировать пользовательский интерфейс приложения и определять поля ввода, которые он может заполнить. Вот почему метод onFillRequest() получает объект AssistStructure, который содержит сведения обо всех виджетах, которые в настоящее время видны на экране. Точнее, он содержит дерево объектов ViewNode.

Если вы никогда не видели такого дерева, я предлагаю вам использовать инструмент uiautomatorviewer, который является частью Android SDK, для анализа иерархии компоновки нескольких приложений. Например, вот как выглядит иерархия раскладки нашего приложения для Android:

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

Естественно, чтобы проаналазировать все узлы, разветвления, вам нужен рекурсивный метод. Давайте создадим его сейчас:

Как вы можете видеть, этот метод имеет ViewNode и List в качестве параметров. Мы будем использовать List для хранения всех полей ввода, которые ожидают адреса электронной почты.

Теперь вам может быть интересно, как вы можете программным образом определить, ожидает ли поле ввода адрес электронной почты. Ну, на самом деле нет надежного подхода, за которым вы можете следовать. На данный момент мы предполагаем, что все разработчики приложений всегда предоставляют идентификаторы ресурсов для своих полей ввода. Исходя из этого предположения, мы можем просто выбрать все поля ввода, в которых идентификаторы ресурсов содержат строки, такие как «email» и «username«.

Соответственно, добавьте следующий код в метод:

Далее, всякий раз, когда мы сталкиваемся с объектом ViewNode, который содержит больше объектов ViewNode, мы должны рекурсивно вызывать метод identEmailFields() для анализа всех его дочерних элементов. В следующем коде показано, как это сделать:

На этом этапе мы можем вызвать метод identEmailFields() внутри метода onFillRequest() и передать ему корневой узел иерархии представлений.

Если наша служба не может идентифицировать какие-либо поля ввода для электронных писем, она ничем не должна делать. Поэтому добавьте следующий код:

Шаг 2. Создаём и заполняем удалённые представления

Если наша служба идентифицирует поле ввода, которое оно может заполнить, оно должно заполнить раскрывающийся список, который будет отображаться под полем ввода. Однако сделать это непросто, потому что ни поле ввода, ни раскрывающийся список не принадлежат нашему приложению.

Чтобы заполнить раскрывающийся список, мы должны использовать объекты RemoteViews. Как следует из его названия, объект RemoteViews представляет собой набор представлений, которые могут отображаться в другом приложении.

Чтобы инициализировать объект RemoteViews, вам понадобится XML-файл разметки. Давайте создадим один из них и назовём email_suggestion.xml. На данный момент он может содержать только один виджет TextView для отображения адреса электронной почты.

Соответственно, добавьте следующий код в email_suggestion.xml:

Теперь вы можете вернуться к методу onFillRequest() и создать два объекта RemoteViews: один для основного электронного письма, а другой для дополнительного.

Виджеты TextView внутри объектов RemoteViews должны отображать два адреса электронной почты, которые мы сохранили в файле на активности настроек ранее. Чтобы открыть файл, снова используйте метод getSharedPreferences(). После его открытия вы можете использовать метод getString() для получения обоих адресов.

Наконец, чтобы поменять содержимое удаленных TextView, вы должны использовать метод setTextViewText().

Шаг 3. Создание наборов данных

Теперь мы можем использовать удаленные представления для создания наборов данных автозаполнения, которые могут быть отправлены в любое приложение. Мы будем создавать наборы данных только для первого поля ввода электронной почты, с которым мы сталкиваемся. В следующем коде показано, как выбрать только первое поле ввода:

Набор данных автозаполнения является всего лишь экземпляром класса Dataset и может быть построен с использованием класса Dataset.Builder.

Когда пользователь выбирает один из адресов электронной почты, показывающийся в раскрывающемся списке нашего сервиса, он должен установить содержимое связанного поля ввода с помощью метода setValue() класса Dataset.Builder. Однако вы не можете передать объект ViewNode методу setValue(). Он ожидает идентификатор автозаполнения, который должен быть получен путем вызова метода getAutofillId() объекта ViewNode.

Кроме того, чтобы указать текст, который должен быть записан в поле ввода, вы должны использовать метод AutofillValue.forText(). В следующем коде показано, как это сделать:

Прежде чем отправлять наборы данных в приложение, вы должны добавить их в объект FillResponse, который может быть создан с использованием класса FillResponse.Builder. Дважды вызовите его метод addDataset(), чтобы добавить оба набора данных.

Когда объект FillResponse готов, передайте его как аргумент методу onSuccess() объекта FillCallback, который является одним из параметров метода onFillRequest().

В результате код класса EmailAddressFiller будет выглядеть следующим образом:

Шаг 4. Обновляем манифест

Как и все сервисы, автозаполнение должно быть объявлено в файле AndroidManifest.xml проекта. При этом вы должны убедиться, что он защищен разрешением android.permission.BIND_AUTOFILL.

Соответственно, добавьте следующие строки в файл манифеста:

Теперь наше приложение и сервис готовы. Соберите проект и установите приложение на своё устройство или эмулятор.

4. Активируем и используем сервис автозаполнения

Для того, чтобы активировать сервис автозаполнения, нужно зайти в Настройки — Система — Язык и ввод — Расширенные настройки — Autofill service (в текущей версии не переведено) и выбрать сервис приложения.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

Теперь вы можете открыть любое приложение, требующее ввести адрес электронной почты, чтобы проверить работу сервиса. Например, Gmail.

Источник

Средства миграции данных Android и улучшение поддержки приложений

Привет, Хабр! Представляю вашему вниманию перевод статьи «Discover tools for Android data migration and improve your app retention» авторов Sean McQuillan и Prateek Tandon.

Пользователи создают учетные записи, активируют их, а затем сохраняются, когда многократно запускают приложение. Обычно пользователю не нужно повторно вводить пароль для Android-приложения в течение многих лет, то есть до тех пор, пока он не купит новый телефон.
Покупка нового телефона — это редкое событие для многих людей, может пройти несколько лет между обновлением устройств. Существует несколько инструментов, которые помогут пользователям войти в систему, когда они будут использовать приложение на новом телефоне.

Резервное копирование данных приложения

Автозагрузка должна быть настроена для каждого приложения. Эта функция автоматически создает резервные копии данных приложения. Поэтому, когда люди получают новый телефон, их данные из приложений автоматически восстанавливаются до запуска приложения.
Чтобы настроить автозагрузку приложения, вам необходимо установить правила включения и исключения:

При настройке правил include и exclude важно избегать хранения конфиденциальных пользовательских данных в Auto Backup, хотя это отличное место для хранения пользовательских настроек и другого содержимого приложения.

Чтобы реализовать отслеживание для Auto Backup, зарегистрируйте BackupAgent и прослушайте onQuotaExceeded обратный вызов. Если ваше приложение превышает предел резервной копии 25 МБ, этот обратный вызов будет уведомлением о сбое. В хорошо сконфигурированном приложении этого никогда не произойдет, поэтому вы можете отслеживать его как отчет о сбое.

Оптимизируйте вход в систему

Пользователи не хотят повторно вводить логин и пароль. Существует несколько способов для решения этой задачи:

1. Используя Google Sign-In, пользователи могут войти в систему со своей учетной записью Gmail или любым адресом электронной почты. Самое главное, им не нужно запоминать пароль. Помимо улучшения регистрации и активации, включение входа в Google также поможет с сохранением, поскольку позволяет тем, кто получает новые телефоны, активироваться с помощью одной кнопки или даже автоматически. Еще вы можете использовать Google Sign-In для входа в систему приложений iOS, Web и Android. Также если ваше приложение использует Firebase Auth для обработки входа в Google.

2. Сделайте процесс входа проще с помощью Google Smart Lock и Autofill. Эти две функции работают рука об руку, чтобы помочь людям безопасно получить доступ к своим паролям. Autofill был представлен в Android O и будет предлагать автоматически сохранять пароли пользователя в хранилище данных Smart Lock или в предпочтительном диспетчере паролей при входе в систему. Настройте подсказки автозаполнения и исключите поля, которые не должны быть заполнены Autofill.

3. Интеграция Smart Lock с API для безопасного хранения паролей. Smart Lock обратно совместим с API 9 и отлично работает на устройствах со старыми версиями Android, которые не работают с Autofill. Подобно Autofill, Smart Lock API предложит спасти пароли пользователя после входа в систему. Программный поиск Smart Lock API позволяет автоматически возвратиться к пользовательскому входу даже на новых устройствах и в Chrome. Чтобы поддержать эту функцию Smart Lock, вам нужно будет включить в приложение какой-то код; проверьте Codelab, чтобы узнать, как интегрировать Smart Lock для паролей в приложение. Также не забудьте связать свое приложение с веб-сайтом, чтобы обеспечить беспрепятственный доступ к Chrome с помощью Autofill и Smart Lock.

4. Используя API переноса учетных записей, подумайте заранее, чтобы ваше приложение могло передавать учетные данные со старого телефона на новый. Приложение использует зашифрованный bluetooth или кабель, и вы можете передавать данные с телефонов с интерфейсом API 14 или выше. Перенос учетной записи происходит, когда пользователь вашего приложения настраивает свой новый телефон в первый раз, когда ваше приложение будет повторно установлено из Google Play, учетные данные вашего приложения будут доступны при первом запуске.

Также можно настроить автозагрузку для Android Codelab и SmartLock Codelab.

Теперь вы можете облегчить миграцию данных благодаря набору инструментов: передача настроек с помощью Auto Backup, улучшение входа в систему с помощью входа в аккаунт Google, Smart Lock для паролей, автозаполнение и API перенос аккаунта.

Источник

Disabling Android O auto-fill service for an application

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 the auto-fill service.

To block autofill for an entire activity, use this in onCreate() of the activity:

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

10 Answers 10

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.

You can also force request autofill this way.

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

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

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:

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!

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:

Seems to be a bug that needs to be fixed : https://issuetracker.google.com/issues/67675432
In the meanwhile a workaround for now is to disable the AutoFill feature for the whole project. You can add in the values-v26/styles.xml file the following style or you can edit your BaseEditTextStyle if you are using a specific style for your EditText views.

and in the values-v26/themes.xml file you can simply add to the default theme that you are using in your app the items editTextStyle and android:editTextStyle like following :

this way you can apply this changes for all your EditTexts without needing to change your layout files or Activities (and later on you can easily remove it when the bug is fixed).

Not that I am aware of. Certainly, nothing is documented.

Not that I am aware of.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

In your EditText attributes add android:importantForAutofill=»no» This should be a temporary fix and will only apply to api 26+

Then in your activity theme set this style for editTextStyle.

Источник

Getting Android’s Autofill to Work for You

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

May 23, 2018 · 5 min read

Oreo (8.0) added framework support for autofill, allowing users to easily autofill login credentials, addresses, and more. For the most part, the autofill APIs work very well, but there are a few quirks to watch out for.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

The benefits are well worth the development cost. Our browsers have been autofilling that information for us for years, so why can’t our apps? Similarly, users who use a password manager have to switch between apps to get the right password. Anything you can do to simplify these processes will make you users much happier!

Using autofill

I won’t g o in depth on how to add basic autofill support for your apps because Google already has excellent documentation on getting started here.

For many use cases autofill will simply work out of the box on Oreo.

If autofill doesn’t work as you expect it to, you will need to do some work to tell autofill how to work with your layout. You do this using the new android:autofillHints attribute to tell autofill what type of content you expect, and android:importantForAutofill to tell autofill which views you want (or do not want) to be filled.

How autofill works

Autofill works with two primary components.

Note that while your user may have multiple autofill services installed, only one can be active at a time.

When focus in your app moves to a View that supports autofill, the autofill service will get an opportunity to provide content. Autofill services rely on a variety of attributes to determine what content to provide. Services should use the autofillHints first, but if the hints aren’t clear enough, they might also use the View’s hint text, ID, type, or other properties.

If you want to learn more about how that process works, check out Google’s Build an Autofill Service documentation.

Not all autofill services are equal

One problem you may run into is that not all autofill services are capable of filling the same types of content. While Google’s autofill service can fill in credentials, addresses, phone numbers, credit card information, and more, Dashlane only supports credentials (at the time of writing this article).

This means that based on which autofill service your user selects, they may or may not get autofill options for your app.

Android autofillhints что это. Смотреть фото Android autofillhints что это. Смотреть картинку Android autofillhints что это. Картинка про Android autofillhints что это. Фото Android autofillhints что это

Unfortunately there is no getting around this inconsistency. I hope that Google will encourage developers to support a greater (and more consistent) range of content, but that’s tricky to do. It would be nice if you could select a different service for different content types, but I don’t anticipate that happening.

Parsing inconsistency

Each autofill service is responsible for creating its own heuristics for parsing your inputs to determine what content to fill in.

Google’s service is really good at this. It can take a set of fields marked as address fields and correctly determine where to put each component of the address.

Other services may not perform as well. They will almost certainly use different heuristics, and that may result in inconsistent behavior.

Data formatting

One last issue may run into is that the data the autofill service provides may not be in a format that is usable in your application.

For example, Google’s autofill service may fill in a phone number that includes the country code (e.g. “+1 (555) 555–5555”). Your application may not want to display or consume the country code.

Unfortunately there is no good framework approach to sanitizing data coming from autofill. You can however work around it by creating a custom view and overriding the new autofill() method:

I would really like to see a more flexible approach from the Android team that allows for doing this type of sanitation on any type of view. There is an open feature request here if you are interested in a solution as well.

Testing suggestions

One last note: When testing your app with autofill, I highly recommend running Google’s sample autofill service. It has very basic parsing heuristics for determining how to fill inputs and it supports a wide variety of data types. Because you have access to the source you can see exactly what is happening and debug the behavior.

The biggest problem with a production autofill service when testing your app is that it is a black box. You don’t know what it is doing to determine what data to fill in. The sample autofill service allows you to pull back that curtain, and also lets you manage the data more easily. Google’s autofill service for example doesn’t make it particularly easy to manage your addresses for autofill, but you can easily generate data with the sample service.

Hopefully with these tips you will be able to better manage and work with Android’s autofill framework!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *