এআই চশমার জন্য রানটাইমে ডিভাইসের প্রাপ্যতা যাচাই করুন

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

জীবনচক্রের অবস্থাগুলো বুঝুন

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

জীবনচক্র অবস্থা

ডিভাইসের অবস্থা

বর্ণনা

INITIALIZED

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

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

CREATED

নিষ্ক্রিয়

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

STARTED

সক্রিয়

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

DESTROYED

বিচ্ছিন্ন

ডিভাইসটির সংযোগ বিচ্ছিন্ন হয়ে গেছে অথবা পরিষেবা সংযোগটি বিচ্ছিন্ন হয়ে গেছে।

ডিভাইসের প্রাপ্যতা পরীক্ষা ও পর্যবেক্ষণ করুন

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

    // 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 স্টেট নির্দেশ করে যে ডিভাইসটি আর ব্যবহার করা হচ্ছে না, তাই অপ্রয়োজনীয় ব্যাটারি খরচ রোধ করতে এবং ব্যবহারকারীর গোপনীয়তা রক্ষা করতে এই প্রসেসগুলো বন্ধ করা অপরিহার্য।