Помимо базовых функций обмена сообщениями, которые позволяют читать и отвечать на сообщения с помощью уведомлений, Android Auto поддерживает более продвинутые возможности, реализованные с помощью библиотеки приложений Android for Cars.
Поддержка обмена сообщениями на основе уведомлений
Все приложения, поддерживающие обмен сообщениями на основе шаблонов, должны также расширять уведомления о сообщениях для Android Auto. Благодаря этой интеграции пользователи могут читать сообщения и отвечать на них, не открывая приложение с шаблонами.
Как создать шаблон сообщения
Чтобы начать создавать шаблон приложения, следуйте инструкциям в статьях Как использовать Android for Cars App Library и Как добавить поддержку Android Auto в приложение на основе шаблона. Затем ознакомьтесь с требованиями к приложениям для обмена сообщениями с шаблонами, приведенными на этой странице.
Как настроить файлы манифеста приложения
Чтобы сообщить Android Auto о возможностях приложения, оно должно:
Как объявить поддержку категорий в манифесте
В фильтре интентов элемента CarAppService вашего приложения должна быть объявлена androidx.car.app.category.MESSAGING категория автомобильного приложения.
<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>
Как задать минимальный уровень Car App API
Поскольку API ConversationItem поддерживается только в Car API версии 7 или более поздней, вам также следует задать для метаданных minCarApiLevel это значение. Подробнее об уровне Car App API…
<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 последних или самых важных чатов, а в каждом из них – не более пяти последних сообщений. Это помогает повысить скорость загрузки, показывать пользователям наиболее релевантный контент и сократить время взаимодействия.
class MyMessagingScreen(carContext: CarContext) : Screen(carContext) { override fun onGetTemplate(): Template { val itemListBuilder = ItemList.Builder() val conversations: List<MyConversation> = getConversations() // 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( conversation.id, CarText.create(conversation.title), Person.Builder() .setName("Me") .setKey("self_id") .build(), carMessages, myConversationCallback ) .build() ) } val header = Header.Builder() .setStartHeaderAction(Action.APP_ICON) .setTitle("Conversations") .build() return ListTemplate.Builder() .setHeader(header) .setSingleList(itemListBuilder.build()) .build() } }
В каждом письме ConversationItem автоматически показывает действия для воспроизведения сообщения, отметки его как прочитанного и ответа на него. Эти действия обрабатываются ConversationCallbackDelegate, который вы указываете при создании ConversationItem.
Если в вашем приложении есть ярлыки для чатов, убедитесь, что идентификатор, указанный при создании ConversationItem, совпадает с идентификатором ярлыка чата.
Как обновить цепочки писем
Когда пользователи отправляют и получают сообщения, вам следует обновлять экраны приложения, чтобы показывать новые сообщения. Для этого вызывайте метод invalidate(). Подробнее о том, как обновить содержимое шаблона…
Чтобы пользователям было удобнее, рекомендуем задавать время обновления не более 500 мс. Если частое обновление занимает много времени, можно показывать состояние загрузки, пока загружаются входящие сообщения.
Настройте приоритет уведомлений
Чтобы не отвлекать пользователя, когда он читает переписку, связанную с уведомлением, приложение должно снижать важность входящих уведомлений, чтобы они не появлялись в виде всплывающих уведомлений.
Вы можете отслеживать, виден ли чат, наблюдая за жизненным циклом элемента Screen, который его отображает. Подробнее о жизненном цикле экрана…
Чтобы уведомление не показывалось как уведомление о нежелательном контенте, установите приоритет IMPORTANCE_DEFAULT или ниже.
Распространение приложений для обмена сообщениями с шаблонами
Поскольку приложения с поддержкой шаблонов сообщений можно публиковать в Google Play только в виде версий для внутреннего и закрытого тестирования, не продвигайте сборки с этой функцией в открытое тестирование или рабочую версию. Заявки с такими сборками будут отклонены.