অবস্থান সময় অঞ্চল সনাক্তকরণ

লোকেশন টাইম জোন ডিটেকশন, যা অ্যান্ড্রয়েড ১২ এবং এর পরবর্তী সংস্করণগুলোতে উপলব্ধ, হলো একটি ঐচ্ছিক স্বয়ংক্রিয় টাইম জোন শনাক্তকরণ ফিচার যা ডিভাইসগুলোকে তাদের অবস্থান এবং টাইম জোন ম্যাপের ডেটা ব্যবহার করে টাইম জোন নির্ধারণ করতে দেয়।

অবস্থানভিত্তিক সময় অঞ্চল শনাক্তকরণ হলো টেলিফোনিভিত্তিক সময় অঞ্চল শনাক্তকরণের একটি বিকল্প ব্যবস্থা। যেহেতু এই বৈশিষ্ট্যটির জন্য টেলিফোনির প্রয়োজন হয় না, তাই মোবাইল টেলিফোনি ডিভাইস ছাড়াও বিভিন্ন ধরনের ডিভাইসে এটি সমর্থন করা সম্ভব।

AOSP প্ল্যাটফর্মে অবস্থান ও সময় অঞ্চল শনাক্তকরণ বৈশিষ্ট্যটি নিম্নলিখিত উপাদানগুলো নিয়ে গঠিত:

  • সিস্টেম সার্ভারে সময় অঞ্চল সনাক্তকরণ যুক্তি
  • অ্যান্ড্রয়েড ১২-এ চালু হওয়া সেটিংস-এর একটি ব্যবহারকারী-অ্যাক্সেসযোগ্য অপশন, যা ব্যবহারকারীদের টেলিফোনি এবং লোকেশন টাইম জোন শনাক্তকরণ পদ্ধতির মধ্যে যেকোনো একটি বেছে নেওয়ার সুযোগ দেয়।

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

  • একটি রেফারেন্স LTZP বাস্তবায়ন।

  • ওপেন স্ট্রিট ম্যাপ (OSM) ডেটা থেকে একটি রেফারেন্স ডেটাসেট তৈরি করার জন্য হোস্ট টুলিং, যা রেফারেন্স ইমপ্লিমেন্টেশনের সাথে ব্যবহার করা যেতে পারে।

ব্যবহারকারীর গোপনীয়তা

অবস্থান ও সময় অঞ্চল সনাক্তকরণে নিম্নলিখিত ব্যবহারকারীর গোপনীয়তা বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে:

  • অবস্থান অ্যালগরিদম নির্বাচন করার জন্য টগল থাকলে, ব্যবহারকারীরা যেকোনো সময় অবস্থান অ্যালগরিদমটি বন্ধ করতে পারেন।

  • অবস্থান-ভিত্তিক টাইম জোনের পরামর্শগুলো একটি ডিভাইসের ব্যবহারকারীদের মধ্যে শেয়ার করা হয় না।

  • ব্যবহারকারীরা 'তারিখ ও সময় সেটিংস' স্ক্রিনের মাধ্যমে সময় অঞ্চল শনাক্তকরণের জন্য অবস্থান সনাক্তকরণ স্পষ্টভাবে নিয়ন্ত্রণ করতে পারেন। এর জন্য ব্যবহারকারীদের কোনো অনুমতি ডায়ালগের মাধ্যমে স্পষ্টভাবে অনুমতি দেওয়ার প্রয়োজন নেই।

  • ডিভাইসের অবস্থানের তথ্য অ্যান্ড্রয়েড প্ল্যাটফর্ম পরিষেবাগুলিতে পাঠানো হয় না। এর পরিবর্তে নিম্নলিখিত ঘটনাটি ঘটে:

    • টাইম জোন ডিটেক্টর পরিষেবাগুলিতে LTZP দ্বারা টাইম জোন আইডি পাঠানো হয়, ডিভাইসের অবস্থান নয়। অবস্থানভিত্তিক টাইম জোন শনাক্তকরণ সমর্থন করার জন্য এটিই ন্যূনতম প্রয়োজনীয় API।
    • সিস্টেম ইন্টিগ্রেটররা স্বতন্ত্র এলটিজেডপি-গুলোর কার্যক্রম নিয়ন্ত্রণ করে। এলটিজেডপি বাস্তবায়নে সম্পূর্ণভাবে অ্যান্ড্রয়েড-চালিত ডিভাইসে সংরক্ষিত টাইম জোন ম্যাপ ডেটা, সার্ভার, অথবা একটি হাইব্রিড পদ্ধতি ব্যবহার করা যেতে পারে।

বৈশিষ্ট্য আচরণ

time_zone_detector সার্ভিসটি ডিটেকশন অ্যালগরিদম থেকে প্রাপ্ত পরামর্শের ভিত্তিতে ডিভাইসের বর্তমান টাইম জোন কখন পরিবর্তন করতে হবে তা নির্ধারণ করে।

location_time_zone_manager সার্ভিসটি time_zone_detector এর লোকেশন অ্যালগরিদমের জন্য সাজেশন তৈরি করার দায়িত্বে থাকে। location_time_zone_manager সার্ভিসটি সিস্টেম সার্ভার প্রসেসে চলে।

location_time_zone_manager সার্ভিসটিতে কোনো টাইম জোন শনাক্তকরণ লজিক নেই। এই সার্ভিসটি এক বা দুটি LTZP প্লাগইনের লাইফসাইকেল পরিচালনার দায়িত্বে থাকে।

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

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

এছাড়াও, বর্তমান ব্যবহারকারী যখন সেটিংস পরিবর্তন করেন, তখন ব্যবহারকারীদের মধ্যে অবস্থানের তথ্য আদান-প্রদান এড়ানোর জন্য location_time_zone_manager সার্ভিসটি (প্রয়োজনে) একটি অনিশ্চিত পরামর্শ দেয়।

এই নির্বাচনগুলোর ফলে, বর্তমান অ্যালগরিদমকে অবস্থানে পরিবর্তন করার পর, অথবা বর্তমান ব্যবহারকারীকে পরিবর্তন করার পর, টাইম জোন শনাক্ত হতে কয়েক সেকেন্ড সময় লাগে। এটি ব্যবহৃত LTZP-গুলোর বাস্তবায়নের উপরও নির্ভর করে।

AOSP লোকেশন টাইম জোন ডিটেকশন ইমপ্লিমেন্টেশনটি এখানে সংজ্ঞায়িত অনুযায়ী সর্বোচ্চ দুটি LTZP, একটি প্রাইমারি এবং একটি সেকেন্ডারি LTZP, ব্যবহারের সুযোগ দেয়:

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

চিত্র ১-এ যেমন দেখানো হয়েছে, time_zone_detector সার্ভিসটি টেলিফোনি বা লোকেশন অ্যালগরিদম থেকে টাইম জোন সাজেশন গ্রহণ করে। লোকেশন অ্যালগরিদমটি প্রাইমারি বা সেকেন্ডারি LTZP থেকে সাজেশন গ্রহণ করে।

অবস্থান সময় অঞ্চল সনাক্তকরণ তথ্য প্রবাহ

চিত্র ১. অবস্থান ও সময় অঞ্চল শনাক্তকরণের তথ্য প্রবাহ।

ডিভাইস কনফিগারেশনের প্রয়োজনীয়তা

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

ডিভাইস কনফিগারেশন

এই অংশে বর্ণনা করা হয়েছে কীভাবে ডিভাইস নির্মাতারা অবস্থান ও সময় অঞ্চল শনাক্তকরণ সমর্থন করার জন্য ডিভাইসগুলো কনফিগার করতে পারেন।

AOSP-এর মূল কনফিগারেশনটি frameworks/base/core/res/res/values/config.xml এ রয়েছে:

কনফিগারেশন কী AOSP মান বর্ণনা
config_enableGeolocationTimeZoneDetection true এটি হলো অবস্থান ও সময় অঞ্চল শনাক্তকরণ বৈশিষ্ট্যের প্রধান নিয়ন্ত্রণ।

এই ফিচারটি AOSP-তে ডিফল্টভাবে সমর্থিত। ব্যবহারকারীদের জন্য ফিচারটি উপলব্ধ হতে হলে অন্তত একটি LTZP অবশ্যই সক্রিয় বা কনফিগার করা থাকতে হবে।

মানটি false সেট করলে ফিচারটি সম্পূর্ণরূপে নিষ্ক্রিয় হয়ে যায়, যার ফলে সামান্য মেমরি সাশ্রয় হয়।
config_enablePrimaryLocationTimeZoneProvider false এর মাধ্যমে প্রাথমিক LTZP সক্রিয় হয়।
config_primaryLocationTimeZoneProviderPackageName এটিকে সেই অ্যাপের প্যাকেজ নামে সেট করুন যেখানে প্রাথমিক পরিষেবা প্রদানকারীর পরিষেবাটি পাওয়া যাবে।
config_enableSecondaryLocationTimeZoneProvider false এর ফলে সেকেন্ডারি এলটিজেডপি সক্রিয় হয়।
config_secondaryLocationTimeZoneProviderPackageName এটিকে সেই অ্যাপের প্যাকেজ নামে সেট করুন যেখানে সেকেন্ডারি প্রোভাইডার পরিষেবাটি পাওয়া যাবে।

ডিফল্টরূপে, AOSP কনফিগারেশনে config_enableGeolocationTimeZoneDetection কী-টি ' true তে সেট করা থাকে, যা লোকেশন টাইম জোন ডিটেকশন ফিচারটির সাপোর্ট সক্রিয় করে। ফিচারটি প্রাথমিকভাবে ব্যবহারকারীদের কাছে দৃশ্যমান হয় না, কারণ AOSP-তে ডিফল্টরূপে কোনো LTZP কনফিগারেশন অন্তর্ভুক্ত থাকে না। তবে, এই ডিফল্ট কনফিগারেশন ব্যবহার করে, ডিভাইস নির্মাতারা পরীক্ষার জন্য কমান্ড লাইন থেকে LTZP সক্রিয় এবং সিমুলেট করতে পারেন। (আরও তথ্যের জন্য, ডিবাগ এবং পরীক্ষা দেখুন)

LTZP স্ট্যাটাস এপিআই

অ্যান্ড্রয়েড ১৪-এ, LTZP API-গুলো LTZP-এর স্ট্যাটাস সংক্রান্ত তথ্য জানানোর সুবিধা দেয়। এর ফলে LTZP এমন সব সমস্যা রিপোর্ট করতে পারে যা প্ল্যাটফর্ম নিজে থেকে হয়তো শনাক্ত করতে পারে না, কারণ লোকেশন অ্যালগরিদমে প্ল্যাটফর্মের টাইম জোন শনাক্তকরণ উপাদানগুলো অবস্থান বা টাইম জোন শনাক্তকরণের সাথে সরাসরি জড়িত থাকে না।

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

LTZP যে স্ট্যাটাসগুলো রিপোর্ট করতে পারে, সে সম্পর্কে আরও তথ্যের জন্য TimeZoneProviderStatus দেখুন।

LTZP কনফিগারেশন এবং স্থাপন

একটি LTZP কনফিগার করার সময়, frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java এর সোর্স কোডে দেওয়া নির্দেশাবলী পড়ুন। Javadoc কমেন্টগুলোতে সার্ভিস, প্রয়োজনীয় পারমিশন এবং অন্যান্য কনফিগারেশন সম্পর্কে বিস্তারিত তথ্য দেওয়া আছে।

একটি LTZP কনফিগার করার জন্য, ডিভাইস প্রস্তুতকারকদের অবশ্যই LTZP-এর পরিষেবা হোস্ট করার জন্য একটি অ্যাপ প্রসেস বেছে নিতে হবে। একটি LTZP-এর জন্য একটি ডেডিকেটেড প্রসেস থাকা একটি উচ্চ ওভারহেড; আদর্শগতভাবে, নির্বাচিত অ্যাপ প্রসেসটি এমন হওয়া উচিত যা সর্বদা চালু থাকে, যেমন সিস্টেম সার্ভার।

মডিউলার সিস্টেম কম্পোনেন্ট (মডিউল) যুক্ত ডিভাইসগুলিতে, LTZP দ্বারা ব্যবহৃত জিও ডেটা এবং টাইম জোন ডেটা মডিউলে ( com.android.tzdata ) থাকা টাইম জোন রুলস (tzdb)-এর মধ্যেকার পারস্পরিক ক্রিয়া বিবেচনা করুন। একটিকে আপডেট না করে অন্যটিকে আপডেট করলে ভার্সন স্কিউ সমস্যা দেখা দেওয়ার সম্ভাবনা থাকে। আরও তথ্যের জন্য, ফিচার অ্যাডপশন কনসিডারেশনস দেখুন।

AOSP রেফারেন্স LTZP

AOSP-এর packages/modules/GeoTZ অধীনে একটি রেফারেন্স LTZP ইমপ্লিমেন্টেশন রয়েছে। এই রেফারেন্স ইমপ্লিমেন্টেশনটি ডিভাইসের অবস্থান নির্ধারণ করতে AOSP API ব্যবহার করে এবং অবস্থানটিকে এক সেট টাইম জোন আইডির সাথে ম্যাপ করার জন্য ডিভাইসের একটি ডেটা ফাইল ব্যবহার করে।

সোর্স কোডের সাথে অন্যান্য ওপেন সোর্স প্রজেক্ট থেকে সংগৃহীত একটি রেফারেন্স ডেটাসেট অন্তর্ভুক্ত করা হয়েছে। আরও বিস্তারিত জানতে README.md এবং বিভিন্ন LICENSE ফাইলগুলো দেখুন।

ডিবাগ এবং পরীক্ষা

নিম্নলিখিত অংশে অবস্থানের সময় অঞ্চল সনাক্তকরণ বৈশিষ্ট্যটি ডিবাগ এবং পরীক্ষা করার জন্য শেল কমান্ডগুলি বর্ণনা করা হয়েছে।

location_time_zone_manager পরিষেবাটির সাথে ইন্টারঅ্যাক্ট করুন

অ্যান্ড্রয়েড ১২ বা তার পরবর্তী সংস্করণে চালিত কোনো ডিভাইসে লোকেশন অ্যালগরিদম সমর্থিত হলে, অ্যান্ড্রয়েড বুট করার সময় location_time_zone_manager সার্ভিসটি ইনস্ট্যানশিয়েট করে।

location_time_zone_manager এর বর্তমান অবস্থা ডাম্প করতে, ব্যবহার করুন:

adb shell cmd location_time_zone_manager dump

টেস্টিং-এ সহায়তাকারী কমান্ড লাইন অপশনগুলোর একটি বিস্তারিত সেট দেখতে, ব্যবহার করুন:

adb shell cmd location_time_zone_manager help

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

LTZP ইমপ্লিমেন্টেশনগুলো তাদের নিজস্ব ডিবাগিং বা টেস্টিং সাপোর্ট প্রদান করতে পারে। উদাহরণস্বরূপ, সিস্টেম সার্ভার প্রসেসে AOSP রেফারেন্স LTZP রেজিস্টার করা থাকলে, সেটিকে ডিবাগ করার জন্য আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService