Статьи

Совет: как использовать Android Assist API

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

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

Если вы никогда не использовали помощника на своем устройстве или эмуляторе, возможно, он еще не включен. Чтобы включить его, нажмите и удерживайте кнопку «Домой». В появившемся диалоговом окне нажмите кнопку « Да, я в» .

Включение поиска на экране Google

Теперь вы сможете получить доступ к помощнику по умолчанию из любого приложения, просто нажав и удерживая кнопку «Домой». Стоит отметить, что помощник по умолчанию является частью приложения Google и работает лучше всего только после того, как вы вошли в свою учетную запись Google.

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

Чтобы увидеть его в действии, создайте новое действие в своем проекте 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»
    )
);

Вот как выглядит новая карта:

Карта для Goodreads

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.

Проверка JSON-LD с помощью инструмента тестирования структурированных данных

Если вы не удовлетворены тем, как помощник приложения 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>

Ваш пользовательский помощник теперь готов.

Чтобы иметь возможность использовать свой собственный помощник, вы должны установить его в качестве помощника по умолчанию для вашего устройства 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: начало работы
    Джессика Торнсби