สร้างกิจกรรมแรกสำหรับแว่นตา AI

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทนี้
แว่นตา AI

ประสบการณ์การใช้งานแว่นตา AI สร้างขึ้นบน API เฟรมเวิร์ก Activity ของ Android ที่มีอยู่ และรวมแนวคิดเพิ่มเติมเพื่อรองรับลักษณะเฉพาะของแว่นตา AI แว่นตา AI ต่างจากชุดหูฟัง XR ที่เรียกใช้ APK แบบเต็มบนอุปกรณ์ตรงที่ใช้ กิจกรรมเฉพาะที่ทำงานภายในแอปที่มีอยู่ของโทรศัพท์ กิจกรรมนี้ จะฉายจากอุปกรณ์โฮสต์ไปยังแว่นตา AI

หากต้องการสร้างประสบการณ์การใช้งานแว่นตา AI ของแอป คุณต้องขยายแอปโทรศัพท์ที่มีอยู่โดยสร้าง Activity ใหม่ที่ฉายภาพสำหรับแว่นตา AI กิจกรรมนี้ทำหน้าที่เป็นจุดแรกเข้าหลักในการเปิดแอปของคุณบนแว่นตา AI แนวทางนี้ช่วยลดความซับซ้อนในการพัฒนาเนื่องจากคุณแชร์และนำตรรกะทางธุรกิจระหว่างประสบการณ์การใช้งานโทรศัพท์และแว่นตา AI มาใช้ซ้ำได้

ความเข้ากันได้ของเวอร์ชัน

ดูข้อกำหนดความเข้ากันได้ของ Android SDK สำหรับ Jetpack XR SDK

การขึ้นต่อกัน

เพิ่มทรัพยากร Dependency ของไลบรารีสำหรับแว่นตา 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")
}

ประกาศกิจกรรมในไฟล์ Manifest ของแอป

เช่นเดียวกับกิจกรรมประเภทอื่นๆ คุณต้องประกาศกิจกรรมในไฟล์ Manifest ของแอปเพื่อให้ระบบมองเห็นและเรียกใช้ได้

<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>

ประเด็นสำคัญเกี่ยวกับโค้ด

  • ระบุ xr_projected สำหรับแอตทริบิวต์ android:requiredDisplayCategory เพื่อบอกระบบว่ากิจกรรมนี้ควรใช้บริบทที่คาดการณ์ไว้เพื่อ เข้าถึงฮาร์ดแวร์จากอุปกรณ์ที่เชื่อมต่อ

สร้างกิจกรรม

จากนั้นคุณจะสร้างกิจกรรมเล็กๆ ที่แสดงสิ่งต่างๆ บนแว่นตา AI ได้เมื่อใดก็ตามที่เปิดจอแสดงผล

@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() }
                )
            }
        }
    }
}

ประเด็นสำคัญเกี่ยวกับโค้ด

  • เลือกใช้ API เวอร์ชันทดลองจากไลบรารี Jetpack Projected
  • GlassesMainActivity ขยาย ComponentActivity เช่นเดียวกับที่คุณคาดหวังในการพัฒนาแอปบนมือถือ
  • เนื่องจากแว่นตา AI บางรุ่นไม่มีจอแสดงผล ให้ตรวจสอบว่าอุปกรณ์มีจอแสดงผลหรือไม่โดยใช้ ProjectedDeviceController
  • บล็อก setContent ภายในฟังก์ชัน onCreate จะกำหนดรูทของแผนผัง UI ของฟังก์ชันที่ประกอบกันได้สำหรับกิจกรรม คุณจะใช้ Composable HomeScreen โดยใช้ Jetpack Compose Glimmer
  • เริ่มต้น UI ในระหว่างเมธอด onCreate ของกิจกรรม (ดูวงจรกิจกรรมที่ฉาย)

ใช้ฟังก์ชันที่ประกอบกันได้

กิจกรรมที่คุณสร้างจะอ้างอิงฟังก์ชันที่ประกอบกันได้ของ HomeScreen ซึ่งคุณต้องใช้ โค้ดต่อไปนี้ใช้ Jetpack Compose Glimmer เพื่อกำหนดฟังก์ชันที่ประกอบกันได้ ซึ่งแสดงข้อความบนจอแสดงผลของแว่นตา 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")
        }
    }
}

ประเด็นสำคัญเกี่ยวกับโค้ด

  • ตามที่คุณกำหนดไว้ในกิจกรรมก่อนหน้านี้ ฟังก์ชันที่ประกอบกันได้ของ HomeScreen ประกอบด้วยเนื้อหาที่ประกอบกันได้ซึ่งผู้ใช้เห็นเมื่อจอแสดงผลของแว่นตา AI เปิดอยู่
  • คอมโพเนนต์ Text ของ Glimmer ใน Jetpack Compose จะแสดงข้อความ "Hello, AI Glasses!" ในจอแสดงผลของแว่นตา
  • Glimmer ของ Jetpack Compose Button จะปิดกิจกรรมโดยการเรียกใช้ finish() ผ่าน onClose ในกิจกรรมแว่นตา AI

ตรวจสอบว่าแว่นตา AI เชื่อมต่ออยู่หรือไม่

หากต้องการตรวจสอบว่าแว่นตา AI ของผู้ใช้เชื่อมต่อกับโทรศัพท์หรือไม่ก่อน เปิดกิจกรรม ให้ใช้เมธอด ProjectedContext.isProjectedDeviceConnected เมธอดนี้จะส่งคืน Flow<Boolean> ที่แอปของคุณสามารถสังเกตเพื่อรับข้อมูลอัปเดตแบบเรียลไทม์เกี่ยวกับสถานะการเชื่อมต่อ

เริ่มกิจกรรม

เมื่อสร้างกิจกรรมพื้นฐานแล้ว คุณก็เปิดใช้กิจกรรมในแว่นตาได้ หากต้องการเข้าถึงฮาร์ดแวร์ของแว่นตา แอปของคุณต้องเริ่มกิจกรรมด้วยตัวเลือกที่เฉพาะเจาะจงซึ่งบอกให้ระบบใช้บริบทที่คาดการณ์ไว้ ดังที่แสดงในโค้ดต่อไปนี้

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

เมธอด createProjectedActivityOptions ใน ProjectedContext จะสร้างตัวเลือกที่จำเป็นเพื่อเริ่มกิจกรรมในบริบทที่คาดการณ์ไว้ พารามิเตอร์ context อาจเป็นบริบทจากโทรศัพท์หรือแว่นตา

ขั้นตอนถัดไป

เมื่อสร้างกิจกรรมแรกสำหรับแว่นตา AI แล้ว ให้ลองดูวิธีอื่นๆ ที่คุณสามารถขยายฟังก์ชันการทำงานได้