অডিও গ্লাস ও ডিসপ্লে গ্লাসের জন্য রানটাইমে ডিভাইসের উপলভ্যতা চেক করা

প্রযোজ্য XR ডিভাইস
এইসব XR ডিভাইসের জন্য অভিজ্ঞতা তৈরি করতে এই নির্দেশিকা আপনাকে সাহায্য করে।
অডিও ও
ডিসপ্লে গ্লাস

ব্যবহারকারী যখন তার দৈনন্দিন কাজ করেন, তখন তার অডিও গ্লাস বা ডিসপ্লে গ্লাসের সাথে হোস্ট ডিভাইসের (যেমন, ব্যবহারকারীর ফোন) কানেকশন লস্ট হতে পারে অথবা ব্যবহারকারী গ্লাস খুলে রাখলে সেটি সাময়িকভাবে অনুপলভ্য হতে পারে। ডিভাইসের উপলভ্যতাতে এই ধরনের পরিবর্তনকে অ্যাকাউন্ট করার জন্য, আপনার অ্যাপ XR ডিভাইস উপলভ্যতা API ব্যবহার করতে পারে, যা ডিভাইসের উপলভ্যতা সংক্রান্ত সিগন্যালকে স্ট্যান্ডার্ড Android Lifecycle.State ভ্যালুতে কনসোলিডেট করে। অডিও রাউটিং, হটওয়ার্ড অ্যাক্টিভেশন ম্যানেজ করতে এবং গ্লাস উপলভ্য থাকাকালীন ব্যবহারকারীর ইনপুট কখন পাওয়া যাবে তা জানতে এই API ব্যবহার করুন।

লাইফসাইকেল স্টেট বোঝা

নিচের সারণীতে ডিভাইস উপলভ্যতা সংক্রান্ত সিগন্যাল কীভাবে Lifecycle.State ভ্যালুর সাথে ম্যাপ করা হয় তা তালিকাভুক্ত করা হয়েছে।

লাইফসাইকেল স্টেট

ডিভাইস স্ট্যাটাস

বর্ণনা

INITIALIZED

তৈরি করা হয়েছে

লাইফসাইকেল অবজেক্ট তৈরি করা হয়েছে, কিন্তু এখনও পর্যবেক্ষণ করা হয়নি।

CREATED

অ্যাক্টিভ নেই

পরিষেবা কানেক্ট করা আছে, কিন্তু ব্যবহারকারী ডিভাইসটি পরেননি।

STARTED

অ্যাক্টিভ

ব্যবহারকারী ডিভাইসটি পরে আছেন।

DESTROYED

ডিসকানেক্ট হয়ে গেছে

ডিভাইস ডিসকানেক্ট হয়ে গেলে বা পরিষেবা কানেকশন বিচ্ছিন্ন হয়ে গেলে।

RESUMED

N/A

ডিভাইস লাইফসাইকেলে বর্তমানে এই স্টেট ব্যবহার বা এমিট করা হয় না।

ডিভাইসের উপলভ্যতা চেক ও মনিটর করা

কোনও ডিভাইসের উপলভ্যতা চেক ও মনিটর করতে, আপনাকে একটি প্রজেক্টেড কনটেক্সট ব্যবহার করতে হবে। এর সাথে, আপনার অ্যাপ কীভাবে প্রতিটি কেস হ্যান্ডেল করবে তা নির্ধারণ করতে লাইফসাইকেল স্টেট ব্যবহার করতে হবে:

    // In your phone activity or service, check for projected device connection state before
    // attempting to create a projected device context and get the device lifecycle.
    ProjectedContext.isProjectedDeviceConnected(context, currentCoroutineContext())
        .flatMapLatest { isConnected ->
            if (isConnected) {
                try {
                    // Create the projected device context on connection
                    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)
                    val xrDevice = XrDevice.getCurrentDevice(projectedContext)

                    // Get the device lifecycle
                    xrDevice.getLifecycle().currentStateFlow
                } catch (e: IllegalStateException) {
                    flowOf(Lifecycle.State.DESTROYED)
                }
            } else {
                flowOf(Lifecycle.State.DESTROYED)
            }
        }
        .collect { state ->
            when (state) {
                Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
                Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
                Lifecycle.State.DESTROYED -> { /* Device is disconnected from host phone */ }
                else -> { /* Handle other states */ }
            }
        }
}

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • কানেকশন আছে কিনা চেক করুন: ডিভাইস লাইফসাইকেল অ্যাক্সেস করার আগে, ProjectedContext.isProjectedDeviceConnected কল করে যাচাই করুন যে প্রজেক্ট করা ডিভাইসটি হোস্ট ডিভাইসের সাথে কানেক্ট করা আছে।
  • ProjectedContext পাওয়া: কানেকশন যাচাই করার পরেই শুধুমাত্র কল ProjectedContext.createProjectedDeviceContext করুন এবং নিশ্চিত করুন যে আপনি এই প্রসঙ্গটি আপনার XrDevice ইনস্ট্যান্সে পাস করেছেন।
  • কন্টেক্সট ইনভ্যালিডেশন ম্যানেজ করা: প্রজেক্ট করা ডিভাইস কানেক্ট করলেই নতুন deviceId তৈরি হয়। স্টেট DESTROYED-এ পৌঁছে গেলে, বর্তমান ProjectedContext সঠিক থাকে না। এটি অবিলম্বে ব্যবহার করা বন্ধ করুন এবং নতুন কানেকশনের জন্য অপেক্ষা করুন।
  • ব্যাটারি ও রিসোর্স অপ্টিমাইজ করা: সিস্টেম রিসোর্স সেভ করতে এবং ব্যাটারি খরচ কমাতে লাইফসাইকেল স্টেটের উপর ভিত্তি করে অ্যাপের কার্যকারিতা সাবলীলভাবে ম্যানেজ করুন। যেমন, স্টেট STARTED থেকে CREATED-এ ট্রানজিট করলে, আপনাকে গ্লাস-নির্দিষ্ট রিসোর্স, যেমন ক্যামেরা ডেটা স্ট্রিম রিলিজ করতে হবে। CREATED স্টেট থেকে বোঝা যায় যে ডিভাইসটি আর পরা হচ্ছে না, তাই অপ্রয়োজনীয় ব্যাটারি ক্ষয় রোধ করতে এবং ব্যবহারকারীর গোপনীয়তা রক্ষা করতে এইসব প্রসেস বন্ধ করা জরুরি।