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