Tạo hoạt động đầu tiên cho kính AI

Các thiết bị XR áp dụng
Hướng dẫn này giúp bạn tạo trải nghiệm cho các loại thiết bị XR này.
Kính AI

Trải nghiệm kính AI được xây dựng dựa trên Activity API khung Android hiện có và bao gồm các khái niệm bổ sung để hỗ trợ các khía cạnh riêng biệt của kính AI. Không giống như tai nghe XR chạy một APK đầy đủ trên thiết bị, kính AI sử dụng một hoạt động chuyên dụng chạy trong ứng dụng hiện có trên điện thoại. Hoạt động này được chiếu từ thiết bị lưu trữ sang kính AI.

Để tạo trải nghiệm ứng dụng kính AI, bạn có thể mở rộng ứng dụng điện thoại hiện có bằng cách tạo một Activity được chiếu mới cho kính AI. Hoạt động này đóng vai trò là điểm truy cập khởi chạy chính cho ứng dụng của bạn trên kính AI. Phương pháp này giúp đơn giản hoá quá trình phát triển vì bạn có thể chia sẻ và sử dụng lại logic kinh doanh giữa điện thoại và kính AI.

Khai báo hoạt động trong tệp kê khai của ứng dụng

Giống như các loại hoạt động khác, bạn cần khai báo hoạt động của mình trong tệp kê khai của ứng dụng để hệ thống có thể thấy và chạy hoạt động đó.

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

Các điểm chính về mã

  • Chỉ định xr_projected cho thuộc tính android:requiredDisplayCategory để cho hệ thống biết rằng hoạt động này nên sử dụng ngữ cảnh được chiếu để truy cập vào phần cứng từ một thiết bị đã kết nối.

Tạo hoạt động

Tiếp theo, bạn sẽ tạo một hoạt động nhỏ có thể hiển thị nội dung nào đó trên kính AI bất cứ khi nào màn hình bật.

/**
 *   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.
  }

}

Các điểm chính về mã

  • AIGlassesActivity mở rộng ComponentActivity, giống như bạn mong đợi trong quá trình phát triển ứng dụng di động.
  • Khối setContent trong onCreate() xác định gốc của cây giao diện người dùng có khả năng kết hợp cho hoạt động.
  • Khởi chạy giao diện người dùng trong phương thức onCreate() của hoạt động (xem vòng đời hoạt động dự kiến).
  • Thiết lập bố cục cơ sở TopBarScaffold có nền đen cho giao diện người dùng bằng Jetpack Compose Glimmer.

Triển khai thành phần kết hợp

Hoạt động mà bạn đã tạo tham chiếu đến một hàm có khả năng kết hợp DisplayUi mà bạn cần triển khai. Đoạn mã sau đây sử dụng Jetpack Compose Glimmer để xác định một thành phần kết hợp có thể hiển thị một số văn bản trên màn hình của kính AI:

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

Các điểm chính về mã

  • Như bạn đã xác định trong hoạt động trước đó, hàm DisplayUi bao gồm nội dung có khả năng kết hợp mà người dùng nhìn thấy khi màn hình của kính AI bật.
  • Thành phần Jetpack Compose Glimmer Text hiển thị văn bản "Xin chào thế giới!" trên màn hình của kính.

Bắt đầu hoạt động

Sau khi tạo một hoạt động cơ bản, bạn có thể khởi chạy hoạt động đó trên kính. Để truy cập vào phần cứng của kính, ứng dụng của bạn phải khởi động hoạt động bằng các lựa chọn cụ thể để cho hệ thống biết rằng ứng dụng sẽ sử dụng ngữ cảnh được chiếu, như minh hoạ trong mã sau:

val options = ProjectedContext.createProjectedActivityOptions(context)

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

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

Phương thức createProjectedActivityOptions() trong ProjectedContext sẽ tạo ra các lựa chọn cần thiết để bắt đầu hoạt động trong một bối cảnh được chiếu. Tham số context có thể là một ngữ cảnh từ điện thoại hoặc thiết bị kính.

Kiểm tra xem kính AI có được kết nối hay không

Nếu bạn muốn xác định xem kính AI của người dùng có kết nối với điện thoại của họ hay không trước khi chạy hoạt động, hãy sử dụng phương thức ProjectedContext.isProjectedDeviceConnected(). Phương thức này trả về một Flow<Boolean> mà ứng dụng của bạn có thể theo dõi để nhận thông tin cập nhật theo thời gian thực về trạng thái kết nối.

Các bước tiếp theo

Bây giờ, bạn đã tạo hoạt động đầu tiên cho kính AI, hãy khám phá những cách khác mà bạn có thể mở rộng chức năng của hoạt động này: