Avant d'utiliser l'une des API Home pour Android, vous devez initialiser la maison dans votre application. Dans cette étape, vous allez créer une instance singleton de Home
pour le contexte local.
Une seule instance de Home
doit être active à la fois.
Il s'agit du point d'entrée des API Home. Il implique également de déclarer les traits et les types d'appareils que vous prévoyez d'utiliser avec les API Device & Structure et Automation. Si vous débutez avec l'écosystème Google Home et que vous ne savez pas quels traits ou types d'appareils enregistrer, nous vous en avons suggéré quelques-uns des plus courants dans ce guide.
Créer une instance Home
Pour commencer, importez ces packages dans votre application :
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
Pour initialiser les API Home :
Obtenez une référence au contexte
Application
. Ce contexte ne dépend d'aucun cycle de vie d'activité et restera actif tant que votre application le sera. Vous pouvez l'obtenir en appelantContext.getApplicationContext()
ouActivity.getApplication()
.val context = Context.getApplicationContext()
Créez une instance
FactoryRegistry
avec tous les traits et types d'appareils que vous prévoyez d'utiliser dans votre application.Pour ce guide, nous avons suggéré quelques types d'appareils courants (types d'appareils Light, Plug, Sensor, Switch et Thermostat, traits de présence et Assistant pour les automatisations), au cas où vous ne sauriez pas ce dont vous avez besoin. Pour en savoir plus, consultez Enregistrement des caractéristiques et des types d'appareils.
val registry = FactoryRegistry( traits = listOf( AirQuality, AreaAttendanceState, AreaPresenceState, AssistantBroadcast, AssistantFulfillment, BooleanState, ColorControl, ExtendedColorControl, FlowMeasurement, IlluminanceMeasurement, LevelControl, Notification, OccupancySensing, OnOff, RelativeHumidityMeasurement, Switch, TemperatureMeasurement, Thermostat), types = listOf( AirQualitySensorDevice, ColorDimmerSwitchDevice, ColorTemperatureLightDevice, ContactSensorDevice, DimmableLightDevice, DimmablePlugInUnitDevice, DimmerSwitchDevice, ExtendedColorLightDevice, FlowSensorDevice, GenericSwitchDevice, HumiditySensorDevice, LightSensorDevice, OccupancySensorDevice, OnOffLightDevice, OnOffLightSwitchDevice, OnOffPluginUnitDevice, OnOffSensorDevice, SpeakerDevice, TemperatureSensorDevice, ThermostatDevice))
Les instructions d'importation pour chaque trait et type d'appareil enregistrés ici sont obligatoires (Android Studio devrait vous inviter à les ajouter).
Instanciez un
HomeConfig
à l'aide du contexte de coroutineDispatchers.IO
et de votre instance de registre.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
Enfin, créez l'instance singleton de
Home
, qui est le point d'entrée des API, à l'aide du contexte et deHomeConfig
.val homeManager: HomeClient = Home.getClient(context, homeConfig)
Pour éviter les erreurs avec les sessions non valides, il est important de ne créer qu'une instance singleton de Home
en l'encapsulant dans une déclaration d'objet.
Par exemple, l'application exemple procède comme suit :
internal object HomeClientModule {
@Provides
@Singleton
fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
return Home.getClient(
context,
HomeConfig(
coroutineContext = IODispatcherModule.provideIoDispatcher(),
factoryRegistry = registry,
),
)
}
}
Enregistrement des caractéristiques et des types d'appareils
La classe FactoryRegistry
aide les développeurs à optimiser la taille du binaire de leur application en leur permettant d'indiquer explicitement les caractéristiques et les types d'appareils utilisés par leur application.
Notez que les autorisations et le registre d'usine sont dissociés. Par conséquent, les traits et types non enregistrés qui sont disponibles pour votre application à l'aide d'autorisations, mais qui ne sont pas inclus dans le registre d'usine, sont inaccessibles à l'aide de l'API Automation. Ils ne sont pas non plus renvoyés dans les appels de méthode groupés traits()
ou types()
.