Как создать приложение для интернета вещей

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

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

В фильтре интентов элемента 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 for Cars App Library, в котором рассказывается о том, как создавать приложения с помощью Car App Library. Также ознакомьтесь с рекомендациями по обеспечению качества приложений для автомобилей для приложений интернета вещей, поскольку ваше приложение будет проверено на соответствие этим рекомендациям.

Для приложений интернета вещей 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()