एआई चश्मे के लिए अपनी पहली गतिविधि बनाना

इन XR डिवाइसों पर लागू होता है
इस गाइड की मदद से, इन तरह के एक्सआर डिवाइसों के लिए अनुभव बनाए जा सकते हैं.
एआई चश्मा

एआई चश्मे की सुविधा, मौजूदा Android Activity फ़्रेमवर्क एपीआई पर आधारित है. साथ ही, इसमें कुछ और कॉन्सेप्ट शामिल हैं, ताकि एआई चश्मे की खास सुविधाओं को सपोर्ट किया जा सके. XR हेडसेट, डिवाइस पर पूरा APK चलाते हैं. हालांकि, एआई चश्मे में एक खास गतिविधि होती है, जो आपके फ़ोन के मौजूदा ऐप्लिकेशन में चलती है. यह गतिविधि, होस्ट डिवाइस से एआई चश्मे पर प्रोजेक्ट की जाती है.

अपने ऐप्लिकेशन के लिए एआई ग्लास की सुविधा बनाने के लिए, आपको अपने मौजूदा फ़ोन ऐप्लिकेशन को बढ़ाना होगा. इसके लिए, एआई ग्लास के लिए नया प्रोजेक्टेड Activity बनाएं. यह गतिविधि, एआई चश्मे पर आपके ऐप्लिकेशन को लॉन्च करने के मुख्य एंट्री पॉइंट के तौर पर काम करती है. इस तरीके से, डेवलपमेंट आसान हो जाता है. ऐसा इसलिए, क्योंकि फ़ोन और एआई चश्मे के लिए, कारोबार से जुड़े लॉजिक को शेयर और फिर से इस्तेमाल किया जा सकता है.

वर्शन के साथ काम करने की सुविधा

Jetpack XR SDK के लिए, Android SDK के साथ काम करने से जुड़ी ज़रूरी शर्तें देखें.

डिपेंडेंसी

एआई चश्मे के लिए, ये लाइब्रेरी डिपेंडेंसी जोड़ें:

शानदार

dependencies {
    implementation "androidx.xr.runtime:runtime:1.0.0-alpha13"
    implementation "androidx.xr.glimmer:glimmer:1.0.0-alpha11"
    implementation "androidx.xr.glimmer:glimmer-google-fonts:1.0.0-alpha11"
    implementation "androidx.xr.projected:projected:1.0.0-alpha06"
    implementation "androidx.xr.arcore:arcore:1.0.0-alpha12"
}

Kotlin

dependencies {
    implementation("androidx.xr.runtime:runtime:1.0.0-alpha13")
    implementation("androidx.xr.glimmer:glimmer:1.0.0-alpha11")
    implementation("androidx.xr.glimmer:glimmer-google-fonts:1.0.0-alpha11")
    implementation("androidx.xr.projected:projected:1.0.0-alpha06")
    implementation("androidx.xr.arcore:arcore:1.0.0-alpha12")
}

अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, अपनी गतिविधि का एलान करें

अन्य गतिविधियों की तरह ही, आपको भी अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में अपनी गतिविधि के बारे में बताना होगा, ताकि सिस्टम उसे देख सके और चला सके.

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

कोड के बारे में अहम बातें

  • सिस्टम को यह बताने के लिए कि इस गतिविधि में android:requiredDisplayCategory एट्रिब्यूट के लिए xr_projected का इस्तेमाल किया जाना चाहिए, ताकि कनेक्ट किए गए डिवाइस के हार्डवेयर को ऐक्सेस करने के लिए अनुमानित कॉन्टेक्स्ट का इस्तेमाल किया जा सके.

अपनी गतिविधि बनाना

इसके बाद, आपको एक छोटी गतिविधि बनानी होगी. इससे डिसप्ले चालू होने पर, एआई चश्मे पर कुछ दिखाया जा सकेगा.

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

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

    // Register the permissions launcher using the ProjectedPermissionsResultContract.
    private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> =
        registerForActivityResult(ProjectedPermissionsResultContract()) { results ->
            if (results[Manifest.permission.CAMERA] == true) {
                isPermissionDenied = false
                initializeGlassesFeatures()
            } else {
                // Handle permission denial.
                isPermissionDenied = true
            }
        }

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

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

        if (hasCameraPermission()) {
            initializeGlassesFeatures()
        } else {
            requestHardwarePermissions()
        }

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

    private fun initializeGlassesFeatures() {
        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)
        }
    }

    private fun hasCameraPermission(): Boolean {
        return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ==
                PackageManager.PERMISSION_GRANTED
    }

    private fun requestHardwarePermissions() {
        val params = ProjectedPermissionsRequestParams(
            permissions = listOf(Manifest.permission.CAMERA),
            rationale = "Camera access is required to overlay digital content on your physical environment."
        )
        requestPermissionLauncher.launch(listOf(params))
    }
}

कोड के बारे में अहम बातें

  • Jetpack Projected लाइब्रेरी से opt-in APIs का इस्तेमाल करने के लिए ऑप्ट-इन करता है.
  • GlassesMainActivity, ComponentActivity को बढ़ाता है. यह मोबाइल डेवलपमेंट में आपकी उम्मीद के मुताबिक होता है.
  • ऐसा इसलिए, क्योंकि सभी एआई चश्मों में डिसप्ले नहीं होता है. इसलिए, ProjectedDeviceController का इस्तेमाल करके यह पता लगाया जाता है कि डिवाइस में डिसप्ले है या नहीं.
  • onCreate फ़ंक्शन में मौजूद setContent ब्लॉक, ऐक्टिविटी के लिए कंपोज़ेबल यूज़र इंटरफ़ेस (यूआई) ट्री का रूट तय करता है. HomeScreen कंपोज़ेबल को लागू करने के लिए, Jetpack Compose Glimmer का इस्तेमाल करें.
  • यह ऐक्टिविटी के onCreate मेथड के दौरान यूज़र इंटरफ़ेस (यूआई) को शुरू करता है. इसके बारे में जानने के लिए, प्रोजेक्ट की गई ऐक्टिविटी की लाइफ़साइकल देखें.
  • कैमरे से जुड़ी उन सुविधाओं के लिए तैयारी करें जो चश्मे के हार्डवेयर को ऐक्सेस करती हैं. इसके लिए, हार्डवेयर ऐक्सेस करने की अनुमतियों का अनुरोध करें. ऐसा करने के लिए, अनुमतियों को लॉन्च करने वाले प्रोग्राम को रजिस्टर करें, hasCameraPermission और requestHardwarePermissions फ़ंक्शन तय करें, और यह देखें कि initializeGlassesFeatures को कॉल करने से पहले अनुमतियां दी गई हैं या नहीं.

ऐप्लिकेशन बनाने की सुविधा लागू करना

आपने जो गतिविधि बनाई है वह HomeScreen कंपोज़ेबल फ़ंक्शन को रेफ़र करती है. आपको इसे लागू करना होगा. नीचे दिए गए कोड में, Jetpack Compose Glimmer का इस्तेमाल किया गया है. इससे एक कंपोज़ेबल को तय किया जा सकता है. यह कंपोज़ेबल, एआई ग्लास के डिसप्ले पर कुछ टेक्स्ट दिखा सकता है:

@Composable
fun HomeScreen(
    areVisualsOn: Boolean,
    isVisualUiSupported: Boolean,
    isPermissionDenied: Boolean,
    onRetryPermission: () -> Unit,
    onClose: () -> Unit,
    modifier: Modifier = Modifier
) {
    Box(
        modifier = modifier
            .surface(focusable = false)
            .fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        if (isPermissionDenied) {
            Card(
                title = { Text("Permission Required") },
                action = { Button(onClick = onClose) { Text("Exit") } }
            ) {
                Text("Camera access is needed to use AI glasses features.")
                Button(onClick = onRetryPermission) { Text("Retry") }
            }
        } else 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 फ़ंक्शन में, कंपोज़ेबल कॉन्टेंट शामिल होता है. यह कॉन्टेंट, एआई चश्मे का डिसप्ले चालू होने पर उपयोगकर्ता को दिखता है.
  • Jetpack Compose Glimmer Text कॉम्पोनेंट, चश्मे की स्क्रीन पर "Hello, AI Glasses!" टेक्स्ट दिखाता है.
  • Jetpack Compose Glimmer, एआई ग्लास पर की गई गतिविधि को बंद करने के लिए, Button को onClose के ज़रिए कॉल करता है.finish()

देखें कि एआई ग्लास कनेक्ट हैं या नहीं

यह पता लगाने के लिए कि आपकी गतिविधि शुरू करने से पहले, किसी उपयोगकर्ता के एआई चश्मे उसके फ़ोन से कनेक्ट हैं या नहीं, ProjectedContext.isProjectedDeviceConnected तरीके का इस्तेमाल करें. यह तरीका, Flow<Boolean> दिखाता है. आपका ऐप्लिकेशन, कनेक्शन की स्थिति के बारे में रीयल-टाइम अपडेट पाने के लिए इसे देख सकता है.

अपनी गतिविधि शुरू करना

आपने बुनियादी गतिविधि बना ली है. अब इसे अपने चश्मे पर लॉन्च किया जा सकता है. चश्मे के हार्डवेयर को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन को अपनी गतिविधि शुरू करनी होगी. इसके लिए, उसे कुछ खास विकल्पों का इस्तेमाल करना होगा. इन विकल्पों से सिस्टम को प्रोजेक्ट किए गए कॉन्टेक्स्ट का इस्तेमाल करने के बारे में पता चलता है. इसे यहां दिए गए कोड में दिखाया गया है:

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

ProjectedContext में मौजूद createProjectedActivityOptions तरीके से, अनुमानित कॉन्टेक्स्ट में अपनी गतिविधि शुरू करने के लिए ज़रूरी विकल्प जनरेट किए जाते हैं. context पैरामीटर, फ़ोन या चश्मे के डिवाइस से लिया गया कॉन्टेक्स्ट हो सकता है.

अगले चरण

आपने एआई चश्मे के लिए पहली गतिविधि बना ली है. अब इसकी सुविधाओं को बढ़ाने के अन्य तरीके जानें: