Приложения для Интернета вещей позволяют пользователям выполнять необходимые действия на подключенных устройствах, не выходя из автомобиля. Например, можно управлять состоянием определенных устройств, таких как открытие гаражных ворот, включение/выключение света в доме или активация системы домашней безопасности.
Укажите поддержку категорий в вашем манифесте.
Вашему приложению необходимо объявить категорию автомобильных приложений androidx.car.app.category.IOT в фильтре намерений своего 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.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()