Пользователям Android сегодня больше не нужно открывать браузер и выполнять поиск, чтобы узнать о том, на что они натыкаются при использовании приложения. Вместо этого они могут использовать помощника. Если у вас есть устройство с Android 6.0 или выше, вы, возможно, уже знакомы с его помощником по умолчанию, который изначально назывался Google Now on Tap. В последнее время его имя было изменено на экран поиска .
Помощники, хотя и учитывают контекст, обычно не очень точны. Чтобы повысить точность, разработчики приложений должны использовать Assist API. В этом кратком совете я познакомлю вас с основами API и помогу вам начать создавать свой собственный специальный помощник.
1. Включение помощника по умолчанию
Если вы никогда не использовали помощника на своем устройстве или эмуляторе, возможно, он еще не включен. Чтобы включить его, нажмите и удерживайте кнопку «Домой». В появившемся диалоговом окне нажмите кнопку « Да, я в» .
Теперь вы сможете получить доступ к помощнику по умолчанию из любого приложения, просто нажав и удерживая кнопку «Домой». Стоит отметить, что помощник по умолчанию является частью приложения Google и работает лучше всего только после того, как вы вошли в свою учетную запись Google.
2. Отправка информации помощнику
Помощник по умолчанию очень мощный. Он может автоматически предоставлять контекстно-зависимую информацию на основе текущего содержимого экрана. Это делается путем анализа иерархии представлений активной деятельности.
Чтобы увидеть его в действии, создайте новое действие в своем проекте Android Studio и добавьте в его макет следующий виджет TextView
с именем популярного романа:
1
2
3
4
5
6
|
<TextView
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:text=»Alice’s Adventures in Wonderland»
android:id=»@+id/my_text»
/>
|
Если вы запустите приложение сейчас и долго нажмете кнопку «Домой», помощник по умолчанию отобразит карточки, которые в некоторой степени связаны с содержимым виджета TextView
.
Отправив дополнительную информацию помощнику, вы сможете повысить ее точность. Для этого вы должны сначала переопределить метод onProvideAssistContent()
вашего класса Activity
.
1
2
3
4
|
@Override
public void onProvideAssistContent(AssistContent outContent) {
super.onProvideAssistContent(outContent);
}
|
Теперь вы можете использовать объект AssistContent
для отправки информации помощнику. Например, если вы хотите, чтобы помощник отображал карточку, которая позволяет пользователю читать о романе на Goodreads, вы можете использовать метод setWebUri()
.
1
2
3
4
5
|
outContent.setWebUri(
Uri.parse(
«http://www.goodreads.com/book/show/13023.Alice_in_Wonderland»
)
);
|
Вот как выглядит новая карта:
Assist API также позволяет передавать структурированные данные помощнику с помощью метода setStructuredData()
, который ожидает строку JSON-LD. Самый простой способ создать строку JSON-LD — это использовать класс JSONObject
и его метод put()
.
В следующем примере кода показано, как создавать и отправлять структурированные данные о романе:
01
02
03
04
05
06
07
08
09
10
11
|
outContent.setStructuredData(
new JSONObject()
.put(«@type», «Book»)
.put(«author», «Lewis Carroll»)
.put(«name», «Alice in Wonderland»)
.put(«description»,
«This is an 1865 novel about a girl named Alice, » +
«who falls through a rabbit hole and » +
«enters a fantasy world.»
).toString()
);
|
Если вы решите вручную закодировать строку JSON-LD, я предлагаю вам убедиться, что она действительна с помощью инструмента тестирования структурированных данных Google.
3. Создание Custom Assistant
Если вы не удовлетворены тем, как помощник приложения Google обрабатывает ваши данные, вам следует подумать о создании собственного помощника. Это не займет много усилий.
Все таможенные помощники должны иметь следующее:
- объект
VoiceInteractionService
- объект
VoiceInteractionSession
- объект
VoiceInteractionSessionService
- XML-файл метаданных, описывающий пользовательский помощник
Сначала создайте новый класс Java с именем MyAssistantSession и сделайте его подклассом класса VoiceInteractionSession
. На этом этапе Android Studio должна автоматически сгенерировать конструктор для него.
1
2
3
4
5
|
public class MyAssistantSession extends VoiceInteractionSession {
public MyAssistantSession(Context context) {
super(context);
}
}
|
Переопределив метод класса onHandleAssist()
, вы можете определить поведение своего помощника. А пока давайте просто разберем строку JSON-LD, сгенерированную на предыдущем шаге, и отобразим ее содержимое в виде сообщения Toast
. Как вы уже догадались, чтобы извлечь строку JSON-LD, вы должны использовать метод getStructuredData()
объекта AssistContent
.
В следующем коде показано, как отобразить значение ключа description
строки JSON-LD в качестве сообщения Toast
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
@Override
public void onHandleAssist(Bundle data,
AssistStructure structure, AssistContent content) {
super.onHandleAssist(data, structure, content);
try {
// Fetch structured data
JSONObject structuredData =
new JSONObject(content.getStructuredData());
// Display description as Toast
Toast.makeText(
getContext(),
structuredData.optString(«description»),
Toast.LENGTH_LONG
).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
|
Объект VoiceInteractionSession
должен быть создан VoiceInteractionSessionService
объекта VoiceInteractionSessionService
. Поэтому создайте новый класс Java с именем MyAssistantSessionService и сделайте его подклассом VoiceInteractionSessionService
. Внутри onNewSession()
вызовите конструктор MyAssistantSession
.
1
2
3
4
5
6
7
|
public class MyAssistantSessionService
extends VoiceInteractionSessionService {
@Override
public VoiceInteractionSession onNewSession(Bundle bundle) {
return new MyAssistantSession(this);
}
}
|
Нашему помощнику также нужен объект VoiceInteractionService
. Поэтому создайте один с именем MyAssistantService . Вам не нужно писать код внутри него.
1
2
3
|
public class MyAssistantService extends VoiceInteractionService {
}
|
Чтобы указать детали конфигурации помощника, вы должны создать файл метаданных XML и поместить его в папку res / xml вашего проекта. Корневой элемент файла должен быть <voice-interaction-service>
указывающим полностью определенные имена подклассов VoiceInteractionService
и VoiceInteractionSessionService
.
Вот пример файла метаданных:
1
2
3
4
5
6
7
|
<?xml version=»1.0″ encoding=»utf-8″?>
<voice-interaction-service
xmlns:android=»http://schemas.android.com/apk/res/android»
android:sessionService=»com.tutsplus.myassistantapp.MyAssistantSessionService»
android:recognitionService=»com.tutsplus.myassistantapp.MyAssistantService»
android:supportsAssist=»true»
/>
|
Наконец, при объявлении служб в файле AndroidManifest.xml вашего проекта убедитесь, что им требуется разрешение BIND_VOICE_INTERACTION
.
01
02
03
04
05
06
07
08
09
10
11
12
|
<service android:name=».MyAssistantService»
android:permission=»android.permission.BIND_VOICE_INTERACTION»>
<meta-data android:name=»android.voice_interaction»
android:resource=»@xml/assist_metadata» />
<intent-filter>
<action android:name=»android.service.voice.VoiceInteractionService»/>
</intent-filter>
</service>
<service android:name=».MyAssistantSessionService»
android:permission=»android.permission.BIND_VOICE_INTERACTION»>
</service>
|
Ваш пользовательский помощник теперь готов.
4. Использование Custom Assistant
Чтобы иметь возможность использовать свой собственный помощник, вы должны установить его в качестве помощника по умолчанию для вашего устройства Android. Поэтому откройте приложение « Настройки» и выберите « Приложения»> «Приложения по умолчанию»> «Помощь» и «Голосовой ввод» . Далее, нажмите на опцию приложения Assist, чтобы выбрать своего помощника.
На этом этапе, если вы запустите свое приложение и долго нажмете кнопку «Домой», вы сможете увидеть сообщение « Toast
вашего специального помощника.
Вывод
В этом кратком совете вы узнали, как использовать Assist API для взаимодействия с помощниками на платформе Android. Вы также узнали, как создать элементарный пользовательский помощник. Но предостережение: поскольку помощники могут читать почти весь текст, который присутствует на экране пользователя, вы должны убедиться, что ваш пользовательский помощник обрабатывает конфиденциальные данные в защищенном режиме.
Чтобы узнать больше об Assist API, обратитесь к его официальной документации . А чтобы узнать больше о передовом кодировании и API для платформы Android, ознакомьтесь с некоторыми другими нашими курсами и учебными пособиями здесь, на Envato Tuts +!
-
AndroidПеренос приложения Android на дизайн материалов
-
Android SDKКак выделить приложение Android
-
Android SDKПонимание параллелизма на Android с помощью HaMeR
-
Android SDKФоновое аудио в Android с MediaSessionCompat
-
Android StudioСоздание функциональных приложений для Android в Kotlin: начало работы