Создавайте шаблонные сообщения для 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 на это значение. Для получения дополнительной информации см. Car App API Level .

<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, не следует продвигать сборки, включающие поддержку разделов «Открытое тестирование» или «Производство», поскольку заявки, содержащие сборки в этих разделах, будут отклонены.