Создавайте шаблонные сообщения для Android Auto

Шаблоны сообщений находятся в стадии бета-тестирования.
В настоящее время любой желающий может публиковать приложения для общения с шаблонами сообщений в Play Store для внутреннего и закрытого тестирования. Публикация в версиях для открытого тестирования и производства будет разрешена позднее.

Помимо базовых возможностей обмена сообщениями с помощью уведомлений для чтения и ответа на сообщения, Android Auto поддерживает расширенные возможности обмена сообщениями, созданные с использованием библиотеки приложений Android for Cars .

Поддержка обмена сообщениями с помощью уведомлений

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

Создайте шаблонный опыт обмена сообщениями

Чтобы приступить к созданию шаблонного интерфейса приложения, следуйте инструкциям в разделах «Использование библиотеки приложений Android for Cars» и «Добавление поддержки Android Auto в шаблон приложения» . Затем ознакомьтесь с рекомендациями на этой странице, чтобы ознакомиться с конкретными требованиями к шаблонным приложениям для обмена сообщениями.

Настройте файлы манифеста вашего приложения

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

Объявите поддержку категории в вашем манифесте

Вашему приложению необходимо объявить категорию автомобильного приложения androidx.car.app.category.MESSAGING в фильтре намерений своего CarAppService .

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.MESSAGING"/>
      </intent-filter>
    </service>
    ...
<application>

Установите минимальный уровень API автомобильного приложения

Поскольку API ConversationItem поддерживается только в Car API версии 7 и выше, необходимо также установить это значение для метаданных minCarApiLevel . Подробнее см. в разделе «Уровень API Car App» .

<application ...>
    ...
    <meta-data
        android:name="androidx.car.app.minCarApiLevel"
        android:value="7"/>
    ...
</application>

Объявить о поддержке Android Auto

В файле automotive_app_desc.xml , который вы используете для объявления поддержки Android Auto , убедитесь, что объявлены возможности notification и template :

<automotiveApp>
    <uses name="notification" />
    <uses name="template" />
</automotiveApp>

Если ваше приложение можно настроить в качестве обработчика SMS по умолчанию , обязательно включите следующий элемент <uses> . В противном случае для обработки входящих SMS/MMS-сообщений будет использоваться встроенный в Android Auto обработчик по умолчанию, что может привести к дублированию уведомлений.

<automotiveApp>
    ...
    <uses name="sms" />
</automotiveApp>

Отображать разговоры

Чтобы отобразить обзор разговоров пользователя, можно отобразить список объектов ConversationItem в ListTemplate или SectionedItemTemplate .

Для удобства пользователей мы рекомендуем отображать не более 5–10 последних или самых важных переписок, при этом для каждой переписки должно быть не более 5 последних сообщений. Это помогает ускорить загрузку, позволяет пользователям видеть наиболее релевантный контент и сокращает время взаимодействия.

class MyMessagingScreen() : Screen() {

    override fun onGetTemplate(): Template {
        val itemListBuilder = ItemList.Builder()
        val conversations: List<MyConversation> = // Retrieve conversations

        for (conversation: MyConversation in conversations) {
            val carMessages: List<CarMessage> = conversation.getMessages()
                .map { message ->
                    // CarMessage supports additional fields such as MIME type and URI,
                    // which you should set if available
                    CarMessage.Builder()
                        .setSender(message.sender)
                        .setBody(message.body)
                        .setReceivedTimeEpochMillis(message.receivedTimeEpochMillis)
                        .setRead(message.isRead)
                        .build()
                }

            itemListBuilder.addItem(
                ConversationItem.Builder()
                    .setConversationCallback { /* Implement your conversation callback logic here */ }
                    .setId(/* Set conversation ID */)
                    .setTitle(/* Set conversation title */)
                    .setIcon(/* Set conversation icon if available */)
                    .setMessages(carMessages)
                    /* When the sender of a CarMessage is equal to this Person,
                    message readout is adjusted to "you said" instead of "<person>
                    said" */
                    .setSelf(/* Set self-sender */)
                    .setGroupConversation(/* Set if the message contains more than 2 participants */)
                    .build()
            )
        }

        return ListTemplate.Builder()
            .setTitle("Conversations")
            .setHeaderAction(Action.APP_ICON)
            .setSingleList(itemListBuilder.build())
            .build()
    }
}

Каждый ConversationItem автоматически отображает действия для воспроизведения сообщения, отметки его как прочитанного и ответа. Эти действия обрабатываются ConversationCallbackDelegate который вы предоставляете при создании элемента ConversationItem .

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

Обновление разговоров

По мере того, как пользователи отправляют и получают сообщения, вам следует обновлять экраны приложения, чтобы отображать новые сообщения, вызывая invalidate() . См. раздел Обновление содержимого шаблона .

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

Установите соответствующую важность уведомлений

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

Вы можете отслеживать видимость беседы, наблюдая за жизненным циклом Screen , на котором она отображается. См. раздел Жизненный цикл экрана .

Чтобы уведомление не отображалось как HUN, установите приоритет IMPORTANCE_DEFAULT или ниже.

Распространять шаблонные приложения для обмена сообщениями

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