ประสบการณ์การใช้งานแว่นตา AI สร้างขึ้นบน API เฟรมเวิร์ก Activity ของ Android ที่มีอยู่ และรวมแนวคิดเพิ่มเติมเพื่อรองรับลักษณะเฉพาะของแว่นตา AI แว่นตา AI ต่างจากชุดหูฟัง XR ที่เรียกใช้ APK แบบเต็มบนอุปกรณ์ตรงที่ใช้กิจกรรมเฉพาะที่ทำงานภายในแอปที่มีอยู่ของโทรศัพท์ กิจกรรมนี้จะฉายจากอุปกรณ์โฮสต์ไปยังแว่นตา AI
หากต้องการสร้างประสบการณ์การใช้งานแว่นตา AI ของแอป คุณต้องขยายแอปโทรศัพท์ที่มีอยู่
โดยสร้าง Activity ใหม่ที่ฉายภาพสำหรับแว่นตา AI กิจกรรมนี้ทำหน้าที่เป็นจุดแรกเข้าหลักในการเปิดแอปของคุณบนแว่นตา AI แนวทางนี้ช่วยลดความซับซ้อนในการพัฒนาเนื่องจากคุณแชร์และนำตรรกะทางธุรกิจระหว่างประสบการณ์การใช้งานโทรศัพท์และแว่นตา AI มาใช้ซ้ำได้
ประกาศกิจกรรมในไฟล์ Manifest ของแอป
เช่นเดียวกับกิจกรรมประเภทอื่นๆ คุณต้องประกาศกิจกรรมในไฟล์ Manifest ของแอปเพื่อให้ระบบมองเห็นและเรียกใช้ได้
<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>
ประเด็นสำคัญเกี่ยวกับโค้ด
- ระบุ
xr_projectedสำหรับแอตทริบิวต์android:requiredDisplayCategoryเพื่อบอกระบบว่ากิจกรรมนี้ควรใช้บริบทที่คาดการณ์ไว้เพื่อ เข้าถึงฮาร์ดแวร์จากอุปกรณ์ที่เชื่อมต่อ
สร้างกิจกรรม
จากนั้นคุณจะสร้างกิจกรรมเล็กๆ ที่แสดงสิ่งต่างๆ บนแว่นตา AI ได้เมื่อใดก็ตามที่เปิดจอแสดงผล
/**
* 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.
}
}
ประเด็นสำคัญเกี่ยวกับโค้ด
AIGlassesActivityขยายComponentActivityเช่นเดียวกับที่คุณคาดหวังในการพัฒนาแอปบนมือถือ- บล็อก
setContentภายในonCreate()จะกำหนดรูทของแผนผัง UI ของฟังก์ชันที่ประกอบกันได้สำหรับกิจกรรม - เริ่มต้น UI ในระหว่างเมธอด
onCreate()ของกิจกรรม (ดูวงจรกิจกรรมที่คาดการณ์ไว้) - ตั้งค่าเลย์เอาต์พื้นฐานของ
TopBarScaffoldสำหรับ UI ด้วยพื้นหลังสีดำ โดยใช้ Jetpack Compose Glimmer
ใช้ฟังก์ชันที่ประกอบกันได้
กิจกรรมที่คุณสร้างจะอ้างอิงฟังก์ชันที่ประกอบกันได้ของ DisplayUi ซึ่งคุณต้องใช้ โค้ดต่อไปนี้ใช้ Jetpack Compose Glimmer เพื่อกำหนดฟังก์ชันที่ประกอบกันได้ ซึ่งแสดงข้อความบนจอแสดงผลของแว่นตา AI ได้
@Composable
fun DisplayUi() {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text("Hello World!")
}
}
ประเด็นสำคัญเกี่ยวกับโค้ด
- ตามที่คุณกำหนดไว้ในกิจกรรมก่อนหน้านี้ ฟังก์ชันที่ประกอบกันได้ของ
DisplayUiประกอบด้วยเนื้อหาที่ประกอบกันได้ซึ่งผู้ใช้เห็นเมื่อจอแสดงผลของแว่นตา AI เปิดอยู่ - คอมโพเนนต์
Textของ Glimmer ใน Jetpack Compose จะแสดงข้อความ "Hello World!" ในจอแสดงผลของแว่นตา
เริ่มกิจกรรม
เมื่อสร้างกิจกรรมพื้นฐานแล้ว คุณก็เปิดใช้กิจกรรมในแว่นตาได้ หากต้องการเข้าถึงฮาร์ดแวร์ของแว่นตา แอปของคุณต้องเริ่มกิจกรรมด้วยตัวเลือกที่เฉพาะเจาะจงซึ่งบอกให้ระบบใช้บริบทที่คาดการณ์ไว้ ดังที่แสดงในโค้ดต่อไปนี้
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, AIGlassesActivity::class.java)
context.startActivity(intent, options.toBundle())
เมธอด createProjectedActivityOptions() ใน ProjectedContext
สร้างตัวเลือกที่จำเป็นเพื่อเริ่มกิจกรรมในบริบทที่คาดการณ์ไว้
พารามิเตอร์ context อาจเป็นบริบทจากโทรศัพท์หรือแว่นตา
ตรวจสอบว่าแว่นตา AI เชื่อมต่ออยู่หรือไม่
หากต้องการตรวจสอบว่าแว่นตา AI ของผู้ใช้เชื่อมต่อกับโทรศัพท์หรือไม่
ก่อนเปิดกิจกรรม ให้ใช้เมธอด ProjectedContext.isProjectedDeviceConnected() เมธอดนี้จะส่งคืน Flow<Boolean> ที่แอปของคุณสามารถสังเกตเพื่อรับข้อมูลอัปเดตแบบเรียลไทม์เกี่ยวกับสถานะการเชื่อมต่อ
ขั้นตอนถัดไป
เมื่อสร้างกิจกรรมแรกสำหรับแว่นตา AI แล้ว ให้ลองดูวิธีอื่นๆ ที่คุณสามารถขยายฟังก์ชันการทำงานได้
- จัดการเอาต์พุตเสียงโดยใช้การอ่านออกเสียงข้อความ
- จัดการอินพุตเสียงโดยใช้การจดจำคำพูดอัตโนมัติ
- สร้าง UI ด้วย Jetpack Compose Glimmer
- เข้าถึงฮาร์ดแวร์ของแว่นตา AI