Criar sua primeira atividade para óculos de IA

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Óculos de IA

A experiência dos óculos de IA é criada na API do framework Activity do Android e inclui outros conceitos para oferecer suporte aos aspectos exclusivos dos óculos de IA. Ao contrário dos headsets de XR que executam um APK completo no dispositivo, os óculos de IA usam uma atividade dedicada que é executada no app atual do smartphone. Essa atividade é projetada do dispositivo host para os óculos de IA.

Para criar a experiência do app para óculos de IA, estenda o app para smartphone criando um novo Activity projetado para óculos de IA. Essa atividade serve como o principal ponto de entrada de inicialização do seu app em óculos de IA. Essa abordagem simplifica o desenvolvimento porque você pode compartilhar e reutilizar a lógica de negócios entre as experiências do smartphone e dos óculos de IA.

Declare sua atividade no manifesto do app

Assim como outros tipos de atividades, é necessário declarar sua atividade no arquivo de manifesto do app para que o sistema a veja e a execute.

<application>
    <activity
        android:name=".AIGlassesActivity"
        android:exported="true"
        android:requiredDisplayCategory="xr_projected"
        android:label="Example AI Glasses activity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
      </intent-filter>
    </activity>
</application>

Pontos principais sobre o código

  • Especifica xr_projected para o atributo android:requiredDisplayCategory e informa ao sistema que essa atividade precisa usar um contexto projetado para acessar o hardware de um dispositivo conectado.

Criar sua atividade

Em seguida, você vai criar uma pequena atividade que pode mostrar algo nos óculos de IA sempre que a tela for ligada.

/**
 *   When this activity launches, it stays in the started state.
 */
class AIGlassesActivity : ComponentActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val projectedWindowManager = ProjectedWindowManager.create(this)

    setContent {

      GlassesComposeContent {
        GlimmerTheme {
          TopBarScaffold(modifier = Modifier.background(color = Color.Black)) {

            ProjectedDisplayController.create(activity)
            .addPresentationModeChangedListener {
            presentationModeFlags ->

            // Check whether visuals are on or off
            val areVisualsOff = !presentationModeFlags.hasPresentationMode(VISUALS_ON)
            }

            // Conditional UI based on presentation mode.
            if (areVisualsOff) {
              // Implementation for the when the display is off.
            } else {
              DisplayUi()
            }
          }
        }
      }
    }
  }

  override fun onStart() {
    // Do things to make the user aware that this activity is active (for
    // example, play audio frequently), when the display is off.
  }

  override fun onStop() {
    // Stop all the data source access.
  }

}

Pontos principais sobre o código

  • O AIGlassesActivity estende ComponentActivity, como você esperaria no desenvolvimento para dispositivos móveis.
  • O bloco setContent dentro do onCreate() define a raiz da árvore de interface combinável da atividade.
  • Inicializa a interface durante o método onCreate() da atividade. Consulte o ciclo de vida da atividade projetada.
  • Configura um layout básico TopBarScaffold com um plano de fundo preto para a interface usando o Jetpack Compose Glimmer.

Implementar o elemento combinável

A atividade criada faz referência a uma função combinável DisplayUi que você precisa implementar. O código a seguir usa o Jetpack Compose Glimmer para definir um elemento combinável que pode mostrar texto na tela dos óculos de IA:

@Composable
fun DisplayUi() {
    Box(
        modifier = Modifier
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        Text("Hello World!")
    }
}

Pontos principais sobre o código

  • Como você definiu na atividade anterior, a função DisplayUi inclui o conteúdo combinável que o usuário vê quando a tela dos óculos de IA está ligada.
  • O componente Glimmer Text do Jetpack Compose mostra o texto "Hello World!" na tela dos óculos.

Começar a atividade

Agora que você criou uma atividade básica, é possível iniciá-la nos óculos. Para acessar o hardware dos óculos, o app precisa iniciar a atividade com opções específicas que informam ao sistema para usar um contexto projetado, conforme mostrado no código a seguir:

val options = ProjectedContext.createProjectedActivityOptions(context)

val intent = Intent(context, AIGlassesActivity::class.java)

context.startActivity(intent, options.toBundle())

O método createProjectedActivityOptions() em ProjectedContext gera as opções necessárias para iniciar sua atividade em um contexto projetado. O parâmetro context pode ser um contexto do smartphone ou do dispositivo de óculos.

Verificar se os óculos de IA estão conectados

Se quiser determinar se os óculos de IA de um usuário estão conectados ao smartphone dele antes de iniciar sua atividade, use o método ProjectedContext.isProjectedDeviceConnected(). Esse método retorna um Flow<Boolean> que seu app pode observar para receber atualizações em tempo real sobre o status da conexão.

Próximas etapas

Agora que você criou sua primeira atividade para óculos de IA, confira outras maneiras de ampliar a funcionalidade deles: