ব্যবহারকারী যখন তার দৈনন্দিন কাজ করেন, তখন তার অডিও গ্লাস বা ডিসপ্লে গ্লাসের সাথে হোস্ট ডিভাইসের (যেমন, ব্যবহারকারীর ফোন) কানেকশন
লস্ট হতে পারে অথবা ব্যবহারকারী গ্লাস খুলে রাখলে সেটি সাময়িকভাবে
অনুপলভ্য হতে পারে। ডিভাইসের উপলভ্যতাতে এই ধরনের পরিবর্তনকে
অ্যাকাউন্ট করার জন্য, আপনার অ্যাপ XR ডিভাইস উপলভ্যতা API ব্যবহার করতে পারে, যা
ডিভাইসের উপলভ্যতা সংক্রান্ত সিগন্যালকে স্ট্যান্ডার্ড Android Lifecycle.State ভ্যালুতে
কনসোলিডেট করে। অডিও রাউটিং, হটওয়ার্ড অ্যাক্টিভেশন ম্যানেজ করতে এবং গ্লাস উপলভ্য
থাকাকালীন ব্যবহারকারীর ইনপুট কখন পাওয়া যাবে তা জানতে এই API ব্যবহার করুন।
লাইফসাইকেল স্টেট বোঝা
নিচের সারণীতে ডিভাইস উপলভ্যতা সংক্রান্ত সিগন্যাল কীভাবে
Lifecycle.State ভ্যালুর সাথে ম্যাপ করা হয় তা তালিকাভুক্ত করা হয়েছে।
লাইফসাইকেল স্টেট |
ডিভাইস স্ট্যাটাস |
বর্ণনা |
|---|---|---|
|
তৈরি করা হয়েছে |
লাইফসাইকেল অবজেক্ট তৈরি করা হয়েছে, কিন্তু এখনও পর্যবেক্ষণ করা হয়নি। |
|
অ্যাক্টিভ নেই |
পরিষেবা কানেক্ট করা আছে, কিন্তু ব্যবহারকারী ডিভাইসটি পরেননি। |
|
অ্যাক্টিভ |
ব্যবহারকারী ডিভাইসটি পরে আছেন। |
|
ডিসকানেক্ট হয়ে গেছে |
ডিভাইস ডিসকানেক্ট হয়ে গেলে বা পরিষেবা কানেকশন বিচ্ছিন্ন হয়ে গেলে। |
|
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স্টেট থেকে বোঝা যায় যে ডিভাইসটি আর পরা হচ্ছে না, তাই অপ্রয়োজনীয় ব্যাটারি ক্ষয় রোধ করতে এবং ব্যবহারকারীর গোপনীয়তা রক্ষা করতে এইসব প্রসেস বন্ধ করা জরুরি।