Создайте приложение для Интернета вещей

Приложения для интернета вещей позволяют пользователям выполнять необходимые действия на подключенных устройствах, не выходя из автомобиля. Например, можно управлять состоянием определенных устройств, таких как открытие гаражных ворот, включение/выключение света в доме или активация системы домашней безопасности.

Укажите поддержку категорий в вашем манифесте.

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

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

Реализуйте функциональность вашего приложения.

Чтобы внедрить ваше приложение, ознакомьтесь с информацией об использовании библиотеки приложений для автомобилей Android, чтобы понять, как создаются приложения из этой библиотеки. Также обязательно ознакомьтесь с рекомендациями по качеству приложений для автомобилей, предназначенных для IoT-приложений , поскольку ваше приложение будет проверяться на соответствие этим рекомендациям.

Для IoT-приложений GridTemplate — хороший выбор для отображения списка устройств и обеспечения взаимодействия пользователей с ними, как показано в следующем примере:

val listBuilder = ItemList.Builder()
val headerBuilder = Header.Builder()
val garageIcon = IconCompat.createWithResource(
    carContext,
    R.drawable.ic_garage
)

listBuilder.addItem(
    GridItem.Builder()
        .setTitle("Garage door")
        .setImage(
            CarIcon.Builder(garageIcon).build(),
            GridItem.IMAGE_TYPE_ICON
        )
        .setOnClickListener {
            // Handle user interactions
        }
        .build()
)

listBuilder.addItem(
    GridItem.Builder()
        .setTitle("Garage lights")
        // Show a loading indicator until the status of the device is known
        // (call invalidate() when the status is known to refresh the screen)
        .setLoading(true)
        .build()
)

return GridTemplate.Builder()
    .setHeader(
        headerBuilder.setTitle("Devices")
            .setStartHeaderAction(Action.APP_ICON).build()
    )
    .setSingleList(listBuilder.build())
    .build()