AI 眼鏡體驗是以現有的 Android Activity架構 API 為基礎建構,並納入其他概念,支援 AI 眼鏡的獨特功能。與在裝置上執行完整 APK 的 XR 頭戴式裝置不同,AI 眼鏡會使用專屬活動,在手機現有的應用程式中執行。這項活動會從主機裝置投影到 AI 眼鏡。
如要建立應用程式的 AI 眼鏡體驗,請為 AI 眼鏡建立新的投影 Activity,藉此擴充現有的手機應用程式。這項活動是 AI 眼鏡上應用程式的主要啟動進入點。這種做法可簡化開發作業,因為您可以在手機和 AI 眼鏡體驗之間共用及重複使用商業邏輯。
在應用程式資訊清單中宣告活動
與其他類型的活動一樣,您需要在應用程式的資訊清單檔案中宣告活動,系統才能查看及執行活動。
<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>
程式碼重點
- 指定
android:requiredDisplayCategory屬性的xr_projected,告知系統這項活動應使用投影背景資訊,從連線裝置存取硬體。
建立活動
接著,您將建立小型活動,在螢幕開啟時,於 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,就像您在行動開發中預期的一樣。onCreate()中的setContent區塊會定義活動的可組合 UI 樹狀結構根層級。- 在活動的
onCreate()方法中初始化 UI (請參閱預計活動生命週期)。 - 使用 Jetpack Compose Glimmer,為 UI 設定黑色背景的
TopBarScaffold基本版面配置。
實作可組合函式
您建立的活動會參照您需要實作的 DisplayUi 可組合函式。下列程式碼使用 Jetpack Compose Glimmer 定義可組合函式,在 AI 眼鏡的螢幕上顯示部分文字:
@Composable
fun DisplayUi() {
Box(
modifier = Modifier
.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text("Hello World!")
}
}
程式碼重點
- 如您先前在活動中定義的內容,
DisplayUi函式包含 AI 眼鏡螢幕開啟時,使用者會看到的可組合內容。 - Jetpack Compose Glimmer
Text元件會在眼鏡螢幕上顯示「Hello World!」文字。
開始活動
您已建立基本活動,現在可以將其啟動到眼鏡上。 如要存取眼鏡的硬體,應用程式必須使用特定選項啟動活動,告知系統使用投影內容,如下列程式碼所示:
val options = ProjectedContext.createProjectedActivityOptions(context)
val intent = Intent(context, AIGlassesActivity::class.java)
context.startActivity(intent, options.toBundle())
ProjectedContext 中的 createProjectedActivityOptions() 方法會產生必要選項,以便在投影情境中啟動活動。context 參數可以是手機或智慧眼鏡裝置的內容。
確認 AI 眼鏡是否已連線
如要在啟動活動前,判斷使用者的 AI 眼鏡是否已連線至手機,請使用 ProjectedContext.isProjectedDeviceConnected() 方法。這個方法會傳回 Flow<Boolean>,應用程式可以觀察這個物件,即時取得連線狀態的最新資訊。
後續步驟
現在您已為 AI 眼鏡建立第一個活動,接下來請探索其他擴充功能的方法: