Começar a usar widgets

Pré-requisitos e configuração

Antes de começar, verifique se o ambiente atende aos seguintes requisitos.

Requisitos de execução

Os widgets para Wear exigem a versão 1.6.1 ou mais recente do APK com.google.android.wearable.protolayout.renderer no dispositivo de destino.

Consiga uma versão compatível do renderizador de uma das seguintes maneiras:

  • Emulador do Wear OS 7: use a imagem do emulador do Wear OS 7. Versões inferiores a 7 não são adequadas. Para instruções de configuração, consulte Configurar o emulador do Wear OS 7.
  • Dispositivo físico: use um dispositivo Wear OS físico que receba atualizações automáticas da Google Play Store ou um dispositivo de desenvolvedor conectado à Google Play Store.

Para verificar qual versão está instalada no seu dispositivo, use o seguinte comando:

adb shell dumpsys package com.google.android.wearable.protolayout.renderer | \
  grep -m 1 versionName | \
  awk -F= '{print $2}'

Configuração do Gradle

As bibliotecas de widgets do Wear estão disponíveis no Google Maven.

1. Configurar a versão do SDK

Verifique se compileSdk e targetSdk estão definidos como 37 ou mais recente.

android {
    compileSdk = 37
    // ...
    defaultConfig {
        targetSdk = 37
        // ...
    }
}

2. Adicionar dependências

Inclua as seguintes dependências no arquivo build.gradle.kts do app:

Groovy

dependencies {
    // Core Wear Widget and Remote Compose libraries
    implementation "androidx.compose.remote:remote-creation-compose:1.0.0-alpha010"
    implementation "androidx.compose.remote:remote-core:1.0.0-alpha010"
    implementation "androidx.glance.wear:wear:1.0.0-alpha09"
    implementation "androidx.glance.wear:wear-core:1.0.0-alpha09"
    implementation "androidx.wear.compose.remote:remote-material3:1.0.0-alpha03"

    // Tooling for previews (optional, but recommended)
    implementation "androidx.compose.remote:remote-tooling-preview:1.0.0-alpha010"
    implementation "androidx.wear.compose:compose-ui-tooling:1.6.1"
    implementation "androidx.wear.tiles:tiles-tooling-preview:1.6.0"
    debugImplementation "androidx.wear.tiles:tiles-renderer:1.6.0"
}

Kotlin

dependencies {
    // Core Wear Widget and Remote Compose libraries
    implementation("androidx.compose.remote:remote-creation-compose:1.0.0-alpha010")
    implementation("androidx.compose.remote:remote-core:1.0.0-alpha010")
    implementation("androidx.glance.wear:wear:1.0.0-alpha09")
    implementation("androidx.glance.wear:wear-core:1.0.0-alpha09")
    implementation("androidx.wear.compose.remote:remote-material3:1.0.0-alpha03")

    // Tooling for previews (optional, but recommended)
    implementation("androidx.compose.remote:remote-tooling-preview:1.0.0-alpha010")
    implementation("androidx.wear.compose:compose-ui-tooling:1.6.1")
    implementation("androidx.wear.tiles:tiles-tooling-preview:1.6.0")
    debugImplementation("androidx.wear.tiles:tiles-renderer:1.6.0")
}

Criar um widget Hello World

Um widget do Wear consiste em um serviço que estende GlanceWearWidgetService e uma classe de widget que estende GlanceWearWidget. A interface é definida usando funções @RemoteComposable. Funções @RemoteComposable.

Definir o serviço

O serviço é o ponto de entrada a que o sistema se vincula.

Para definir o widget, crie um serviço que estenda GlanceWearWidgetService. Como essa biblioteca está em desenvolvimento ativo, algumas APIs são restritas enquanto os nomes e as estruturas finais são refinados. Usar a anotação @SuppressLint("RestrictedApi") informa ao compilador que você está usando intencionalmente esses recursos novos e em evolução. Esse requisito é temporário e será removido quando as APIs forem finalizadas em uma versão estável futura.

@SuppressLint("RestrictedApi")
class HelloWidgetService : GlanceWearWidgetService() {
    override val widget: GlanceWearWidget = HelloWidget()
}

Definir o widget

A classe do widget fornece os dados e o layout dele.

@SuppressLint("RestrictedApi")
class HelloWidget : GlanceWearWidget() {
    override suspend fun provideWidgetData(
        context: Context,
        params: WearWidgetParams,
    ): WearWidgetData {
        return WearWidgetDocument(background = WearWidgetBrush.color(Color.Blue.rc)) {
            HelloWidgetContent()
        }
    }
}

Definir o conteúdo

O conteúdo é criado usando componentes do Remote Compose.

@SuppressLint("RestrictedApi")
@RemoteComposable @Composable
fun HelloWidgetContent() {
    RemoteBox(
        modifier = RemoteModifier.fillMaxSize(),
        contentAlignment = RemoteAlignment.Center,
    ) {
        RemoteText(
            text = "Hello World",
            color = Color.White.rc
        )
    }
}

Criar o XML de configuração do widget

Crie um arquivo res/xml/hello_widget_info.xml para definir as propriedades e os tamanhos compatíveis do widget. Para uma referência completa dos atributos XML compatíveis na tag <wearwidget-provider>, consulte a documentação do WearWidgetProviderInfo.

<wearwidget-provider
    description="@string/hello_widget_description"
    icon="@mipmap/ic_launcher"
    label="@string/hello_widget_label"
    preferredType="SMALL">

    <container
        type="SMALL"
        previewImage="@drawable/widget_preview_small" />
    <container
        type="LARGE"
        previewImage="@drawable/widget_preview_large" />
</wearwidget-provider>

Registrar no AndroidManifest.xml

Registre o serviço no seu AndroidManifest.xml com os filtros de intent e metadados necessários.

<service
    android:name=".snippets.widget.HelloWidgetService"
    android:exported="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/hello_widget_label"
    android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER">

    <intent-filter>
        <action android:name="androidx.glance.wear.action.BIND_WIDGET_PROVIDER" />
        <!-- If you already have a Tile, omit the following line. -->
        <action android:name="androidx.wear.tiles.action.BIND_TILE_PROVIDER" />
    </intent-filter>

    <meta-data
        android:name="androidx.glance.wear.widget.provider"
        android:resource="@xml/hello_widget_info" />

    <meta-data
        android:name="androidx.wear.tiles.PREVIEW"
        android:resource="@drawable/tile_preview" />
</service>

Criar e implantar

Depois de definir o serviço e o widget, é possível criar e implantar o projeto em um dispositivo ou emulador.

Criar e instalar

Crie o projeto e instale o APK de depuração no dispositivo conectado ou emulador:

./gradlew :app:installDebug

Adicionar e visualizar o widget

Depois que o app for instalado, use adb para adicionar o widget ao carrossel e mostrá-lo na tela de forma programática.

Observação:os widgets do Wear usam a infraestrutura de blocos subjacente para fins de depuração. Como resultado, os comandos adb exigem as operações add-tile e show-tile.

1. Adicione o widget ao carrossel:

adb shell am broadcast \
  -a com.google.android.wearable.app.DEBUG_SURFACE \
  --es operation add-tile \
  --ecn component <your_package_name>/.HelloWidgetService

2. Mostrar o widget:

adb shell am broadcast \
  -a com.google.android.wearable.app.DEBUG_SYSUI \
  --es operation show-tile \
  --ei index 0

As prévias do Android Studio também estão disponíveis para ajudar você a testar seus layouts em diferentes tamanhos de tela.