Membuat aktivitas pertama Anda untuk kacamata AI

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Kacamata AI

Pengalaman kacamata AI dibangun di atas Activityframework dan API Android yang ada serta mencakup konsep tambahan untuk mendukung aspek unik kacamata AI. Tidak seperti headset XR yang menjalankan APK lengkap di perangkat, kacamata AI menggunakan aktivitas khusus yang berjalan dalam aplikasi yang ada di ponsel Anda. Aktivitas ini diproyeksikan dari perangkat host ke kacamata AI.

Untuk membuat pengalaman kacamata AI aplikasi Anda, perluas aplikasi ponsel yang ada dengan membuat Activity baru yang diproyeksikan untuk kacamata AI. Aktivitas ini berfungsi sebagai titik entri peluncuran utama untuk aplikasi Anda di kacamata AI. Pendekatan ini menyederhanakan pengembangan karena Anda dapat membagikan dan menggunakan kembali logika bisnis antara pengalaman kacamata AI dan ponsel Anda.

Kompatibilitas versi

Periksa persyaratan kompatibilitas Android SDK untuk Jetpack XR SDK.

Dependensi

Tambahkan dependensi library berikut untuk kacamata AI:

Groovy

dependencies {
    implementation "androidx.xr.runtime:runtime:1.0.0-alpha10"
    implementation "androidx.xr.glimmer:glimmer:1.0.0-alpha06"
    implementation "androidx.xr.projected:projected:1.0.0-alpha04"
    implementation "androidx.xr.arcore:arcore:1.0.0-alpha10"
}

Kotlin

dependencies {
    implementation("androidx.xr.runtime:runtime:1.0.0-alpha10")
    implementation("androidx.xr.glimmer:glimmer:1.0.0-alpha06")
    implementation("androidx.xr.projected:projected:1.0.0-alpha04")
    implementation("androidx.xr.arcore:arcore:1.0.0-alpha10")
}

Mendeklarasikan aktivitas Anda dalam manifes aplikasi

Seperti jenis aktivitas lainnya, Anda perlu mendeklarasikan aktivitas dalam file manifes aplikasi agar sistem dapat melihat dan menjalankannya.

<application>
  <activity
      android:name="com.example.xr.projected.GlassesMainActivity"
      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>

Poin penting tentang kode

  • Menentukan xr_projected untuk atribut android:requiredDisplayCategory untuk memberi tahu sistem bahwa aktivitas ini harus menggunakan konteks yang diproyeksikan untuk mengakses hardware dari perangkat yang terhubung.

Buat aktivitas Anda

Selanjutnya, Anda akan membuat aktivitas kecil yang dapat menampilkan sesuatu di kacamata AI setiap kali layar diaktifkan.

@OptIn(ExperimentalProjectedApi::class)
class GlassesMainActivity : ComponentActivity() {

    private var displayController: ProjectedDisplayController? = null
    private var isVisualUiSupported by mutableStateOf(false)
    private var areVisualsOn by mutableStateOf(true)

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

        lifecycle.addObserver(object : DefaultLifecycleObserver {
            override fun onDestroy(owner: LifecycleOwner) {
                displayController?.close()
                displayController = null
            }
        })

        lifecycleScope.launch {
            // Check device capabilities
            val projectedDeviceController = ProjectedDeviceController.create(this@GlassesMainActivity)
            isVisualUiSupported = projectedDeviceController.capabilities.contains(CAPABILITY_VISUAL_UI)

            val controller = ProjectedDisplayController.create(this@GlassesMainActivity)
            displayController = controller
            val observer = GlassesLifecycleObserver(
                context = this@GlassesMainActivity,
                controller = controller,
                onVisualsChanged = { visualsOn -> areVisualsOn = visualsOn }
            )
            lifecycle.addObserver(observer)
        }

        setContent {
            GlimmerTheme {
                HomeScreen(
                    areVisualsOn = areVisualsOn,
                    isVisualUiSupported = isVisualUiSupported,
                    onClose = { finish() }
                )
            }
        }
    }
}

Poin penting tentang kode

Mengimplementasikan composable

Aktivitas yang Anda buat mereferensikan fungsi composable HomeScreen yang perlu Anda terapkan. Kode berikut menggunakan Jetpack Compose Glimmer untuk menentukan composable yang dapat menampilkan beberapa teks di layar kacamata AI:

@Composable
fun HomeScreen(
    areVisualsOn: Boolean,
    isVisualUiSupported: Boolean,
    onClose: () -> Unit,
    modifier: Modifier = Modifier
) {
    Box(
        modifier = modifier
            .surface(focusable = false)
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        if (isVisualUiSupported) {
            Card(
                title = { Text("Android XR") },
                action = {
                    Button(onClick = onClose) {
                        Text("Close")
                    }
                }
            ) {
                if (areVisualsOn) {
                    Text("Hello, AI Glasses!")
                } else {
                    Text("Display is off. Audio guidance active.")
                }
            }
        } else {
            Text("Audio Guidance Mode Active")
        }
    }
}

Poin penting tentang kode

  • Seperti yang Anda tentukan dalam aktivitas sebelumnya, fungsi HomeScreen mencakup konten composable yang dilihat pengguna saat layar kacamata AI aktif.
  • Komponen Glimmer Text Jetpack Compose menampilkan teks "Hello, Kacamata AI!" ke layar kacamata.
  • Glimmer Button Jetpack Compose menutup aktivitas dengan memanggil finish() melalui onClose dalam aktivitas kacamata AI.

Periksa apakah kacamata AI terhubung

Untuk menentukan apakah kacamata AI pengguna terhubung ke ponselnya sebelum meluncurkan aktivitas Anda, gunakan metode ProjectedContext.isProjectedDeviceConnected. Metode ini menampilkan Flow<Boolean> yang dapat diamati aplikasi Anda untuk mendapatkan update real-time tentang status koneksi.

Mulai aktivitas Anda

Setelah membuat aktivitas dasar, Anda dapat meluncurkannya ke kacamata Anda. Untuk mengakses hardware kacamata, aplikasi Anda harus memulai aktivitas dengan opsi tertentu yang memberi tahu sistem untuk menggunakan konteks yang diproyeksikan, seperti yang ditunjukkan dalam kode berikut:

val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, GlassesMainActivity::class.java)
context.startActivity(intent, options.toBundle())

Metode createProjectedActivityOptions di ProjectedContext membuat opsi yang diperlukan untuk memulai aktivitas Anda dalam konteks yang diproyeksikan. Parameter context dapat berupa konteks dari ponsel atau perangkat kacamata.

Langkah berikutnya

Setelah membuat aktivitas pertama untuk kacamata AI, pelajari cara lain untuk memperluas fungsinya: