বিভিন্ন ধরণের অডিও চশমা এবং ডিসপ্লে চশমা সমর্থন করার পরিকল্পনা।

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

বিভিন্ন ধরণের অডিও গ্লাস এবং ডিসপ্লে গ্লাসের ক্ষমতা ভিন্ন ভিন্ন হয়ে থাকে। উদাহরণস্বরূপ, যদিও সব অডিও গ্লাস এবং ডিসপ্লে গ্লাসেই ভয়েসের মাধ্যমে অডিও অভিজ্ঞতা পাওয়া যায়, শুধুমাত্র ডিসপ্লে গ্লাসেই একটি ডিসপ্লে থাকে যেখানে আপনার অ্যাপ Jetpack Compose Glimmer দিয়ে তৈরি UI প্রদর্শন করতে পারে।

বিভিন্ন ডিভাইসে একটি নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে, চশমার জন্য আপনার Activity এমনভাবে পরিকল্পনা করুন যাতে এটি ডিভাইসের বিভিন্ন সক্ষমতা পরীক্ষা করতে পারে। এই পদ্ধতিটি ডেভেলপমেন্টকে সহজ করে তোলে, কারণ এটি আপনাকে নির্দিষ্ট ডিভাইসকে লক্ষ্য করে একাধিক অ্যাক্টিভিটি তৈরির পরিবর্তে এমন একটি অ্যাক্টিভিটি তৈরি করতে দেয় যা নিজের আচরণকে সেই অনুযায়ী পরিবর্তন করে।

পরিকল্পিত কার্যক্রমের জীবনচক্র বুঝুন

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

চিত্র ১। প্রক্ষেপিত কার্যক্রমের জীবনচক্রের প্রধান ঘটনাগুলো।

এখানে মূল ঘটনাগুলোর একটি বিশদ বিবরণ দেওয়া হলো, যেখানে অডিও গ্লাস এবং ডিসপ্লে গ্লাসে প্রদর্শিত কার্যকলাপের জন্য নির্দিষ্ট ইন্টারঅ্যাকশনগুলো চিহ্নিত করা হয়েছে:

  • onCreate()
    • পরিকল্পিত কার্যকলাপটি তৈরি হলে এটি কল করা হয়।
    • এখানে আপনার অ্যাপের Jetpack Compose Glimmer UI এবং অন্যান্য কম্পোনেন্টগুলো ইনিশিয়ালাইজ করুন।
  • onStart()
    • পরিকল্পিত কার্যকলাপ শুরু হওয়ার মুহূর্তে এবং ব্যবহারকারী অ্যাপটি সম্পর্কে অবগত হলে এটি কল করা হয়।
  • onResume()
    • প্রজেক্টেড অ্যাক্টিভিটিটি পুনরায় ফোকাসে এলে এটি কল করা হয়। অ্যাক্টিভিটিটি ফোকাসে থাকা অবস্থায়, এটি ইন্টারঅ্যাক্টযোগ্য থাকে এবং টাচপ্যাড বা বাটনের ইনপুট গ্রহণ করতে পারে।
    • মাথা থেকে চশমা খুলে ফেলার পর (ডফড) যখন তা আবার মাথায় পরা হয় (ডনড), তখন তাকে এই নামে ডাকা হয়।
  • onPause()
    • যখন প্রজেক্টেড অ্যাক্টিভিটি ফোকাস হারায়, কিন্তু ব্যবহারকারী তখনও আপনার অ্যাপটি সম্পর্কে সচেতন থাকেন , তখন এটি কল করা হয়। অ্যাক্টিভিটি ফোকাসের বাইরে থাকাকালীন, এটি ইন্টারঅ্যাক্ট করার যোগ্য থাকে না এবং ইনপুট গ্রহণ করা বন্ধ করে দেয়।
  • onStop()
    • যখন সিস্টেম মনে করে যে ব্যবহারকারী আপনার অ্যাপ সম্পর্কে আর অবগত নন, তখন এটি কল করা হয়।
    • মাথা থেকে চশমা খুলে ফেলার সময় একে বলা হয়।
  • onDestroy()
    • পরিকল্পিত অ্যাক্টিভিটিটি ধ্বংস হওয়ার ঠিক আগে এটিকে কল করা হয়। যখন এটিকে কল করা হয়, তখন সিস্টেমটি উক্ত অ্যাক্টিভিটির সাথে যুক্ত সমস্ত রিসোর্স মুক্ত করে দেয়।

ডিসপ্লে স্টেট কীভাবে প্রজেক্টেড অ্যাক্টিভিটি লাইফসাইকেলকে প্রভাবিত করে তা বুঝুন।

একটি সাধারণ Activity , ডিভাইসের স্ক্রিন বন্ধ হলে লাইফসাইকেল স্টেট পরিবর্তিত হয় এবং সাধারণত onPause() বা onStop() এ চলে যায়। এর বিপরীতে, চশমার ডিসপ্লে চালু বা বন্ধ হলেও প্রোজেক্টেড অ্যাক্টিভিটির লাইফসাইকেল পরিবর্তিত হয় না। এই আচরণের অর্থ হলো, ডিসপ্লে বন্ধ থাকা অবস্থাতেও আপনার প্রোজেক্টেড অ্যাক্টিভিটি Started বা Resumed স্টেটে চলতে থাকে, যা আপনার অ্যাপের অডিও অভিজ্ঞতাকে নিরবচ্ছিন্নভাবে চালিয়ে যেতে সাহায্য করে।

বিভিন্ন সিস্টেম ও ব্যবহারকারী ইভেন্টের দ্বারা সংঘটিত অন্যান্য অ্যাক্টিভিটির অবস্থার পরিবর্তনগুলো স্বাভাবিকভাবে কাজ করে।

ব্যবহারকারীর সচেতনতা আপনার পরিকল্পিত কার্যকলাপকে কীভাবে প্রভাবিত করে তা বুঝুন।

আপনার পরিকল্পিত কার্যকলাপ দৃশ্যমান না হলেও একজন ব্যবহারকারী সে সম্পর্কে সচেতন হতে পারেন। সচেতনতা বলতে সেই সমস্ত উপায়কে বোঝায় যার মাধ্যমে একজন ব্যবহারকারী আপনার অ্যাপের অভিজ্ঞতাগুলো উপলব্ধি করতে এবং সেগুলোর সাথে মিথস্ক্রিয়া করতে পারেন, যার মধ্যে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত:

  • অডিও শোনা, শ্রাব্য প্রতিক্রিয়া বা অন্যান্য শব্দ সংকেত।
  • অ্যাপের এমন সব কার্যকলাপ যা ব্যবহারকারীর সামনে থাকা এলইডি চালু করে, যেমন আপনার অ্যাপ ক্যামেরা বা মাইক্রোফোন অ্যাক্সেস করলে একটি প্রাইভেসি ইন্ডিকেটর।

এই পরিস্থিতিগুলোতে, ব্যবহারকারী সচেতন থাকেন যে অডিও গ্লাস এবং ডিসপ্লে গ্লাস সক্রিয় ও সাড়া দিচ্ছে, এমনকি যদি তিনি কোনো ডিসপ্লের দিকে নাও তাকিয়ে থাকেন:

  • প্রজেক্টেড অ্যাক্টিভিটিগুলোর onStart() স্টেট-এর অর্থ হলো অ্যাক্টিভিটিটি সক্রিয় আছে।
  • onResume() অবস্থাটির অর্থ হলো অ্যাক্টিভিটিটি ইন্টারঅ্যাক্টযোগ্য এবং টাচপ্যাড ইনপুট গ্রহণ করতে পারে, অথবা প্রাইমারি ইনপুট ডিসপ্যাচ গ্রহণ করছে।

যতক্ষণ ব্যবহারকারী আপনার অ্যাপ সম্পর্কে সচেতন থাকেন, ততক্ষণ আপনার অ্যাক্টিভিটি সক্রিয় এবং ফোরগ্রাউন্ডে থাকে। যদি সিস্টেম অল্প সময়ের জন্য সচেতনতার কোনো সংকেত শনাক্ত না করে, তবে সিস্টেম অ্যাক্টিভিটিটিকে ফোরগ্রাউন্ড থেকে সরিয়ে দেয় এবং অবশেষে onStop() ট্রিগার করে।

পরিকল্পিত কার্যক্রম এবং পরিকল্পিত প্রেক্ষাপট বুঝুন

অডিও গ্লাস এবং ডিসপ্লে গ্লাসকে এমন একটি সংযুক্ত ডিভাইস হিসেবে গণ্য করা হয় যা ব্যবহারকারীর ফোনের কার্যক্ষমতা বাড়িয়ে তোলে। একটি প্রোজেক্টেড কনটেক্সট হলো একটি ডিভাইস-সচেতন Context যা অ্যাপগুলোকে ফোনের হার্ডওয়্যারের পরিবর্তে সংযুক্ত গ্লাস ডিভাইসের হার্ডওয়্যারের—যেমন এর সেন্সর, ক্যামেরা বা মাইক্রোফোন—সাথে ইন্টারঅ্যাক্ট করতে দেয়। আপনি যখন অডিও গ্লাস এবং ডিসপ্লে গ্লাসের জন্য এক্সপেরিয়েন্স তৈরি করবেন, তখন গ্লাসের হার্ডওয়্যার অ্যাক্সেস করার জন্য আপনার অ্যাপকে অবশ্যই একটি প্রোজেক্টেড কনটেক্সট ব্যবহার করতে হবে।

কলিং অ্যাক্টিভিটির কনটেক্সটের উপর নির্ভর করে আপনার অ্যাপকে একটি প্রোজেক্টেড কনটেক্সট স্বয়ংক্রিয়ভাবে প্রদান করা যেতে পারে:

  • প্রজেক্টেড অ্যাক্টিভিটির ক্ষেত্রে : যদি আপনার অ্যাপের কোড কোনো প্রজেক্টেড অ্যাক্টিভিটির ভেতর থেকে রান করে, তাহলে তার নিজস্ব অ্যাক্টিভিটি কনটেক্সটটি ইতিমধ্যেই একটি প্রজেক্টেড কনটেক্সট হিসেবে গণ্য হয়। এই পরিস্থিতিতে, ওই অ্যাক্টিভিটির ভেতর থেকে করা কলগুলো আগে থেকেই গ্লাসের হার্ডওয়্যার অ্যাক্সেস করতে পারে।

  • ফোন অ্যাপ বা সার্ভিসের জন্য : যদি আপনার অ্যাপের কোনো অংশ যা আপনার প্রোজেক্টেড অ্যাক্টিভিটির বাইরে (যেমন একটি ফোন অ্যাক্টিভিটি বা একটি সার্ভিস) চশমার হার্ডওয়্যার অ্যাক্সেস করার প্রয়োজন হয়, তবে তাকে অবশ্যই স্পষ্টভাবে একটি প্রোজেক্টেড কনটেক্সট সংগ্রহ করতে হবে। এটি করার জন্য, createProjectedDeviceContext() মেথডটি ব্যবহার করুন।

আরও তথ্যের জন্য, অডিও গ্লাস এবং ডিসপ্লে গ্লাসে হার্ডওয়্যার অ্যাক্সেস করতে একটি প্রজেক্টেড কনটেক্সট ব্যবহার দেখুন।

ডিভাইস-সচেতন এপিআইগুলি বুঝুন

কিছু স্ট্যান্ডার্ড অ্যান্ড্রয়েড এপিআই কলিং অ্যাক্টিভিটির Context -এর উপর নির্ভর করে কোন ডিভাইসের হার্ডওয়্যার অ্যাক্সেস করবে তা পরিবর্তন করে। যখন এই এপিআইগুলো একটি প্রোজেক্টেড কনটেক্সট গ্রহণ করে, তখন তারা হোস্ট ফোন ডিভাইসের হার্ডওয়্যারের পরিবর্তে চশমার হার্ডওয়্যার অ্যাক্সেস করে:

  • CameraManager : চশমার ক্যামেরা অ্যাক্সেস করে।
  • SensorManager : চশমা থেকে সেন্সর ডেটা (যেমন, জাইরোস্কোপ বা অ্যাক্সেলেরোমিটার ডেটা) সংগ্রহ করে।
  • AudioManager : চশমার অডিও স্ট্রিম, ভলিউম এবং রাউটিং পরিচালনা করে।
  • AudioRecord : চশমার মাইক্রোফোন ব্যবহার করে অডিও ধারণ করে।