বিমান মোডে থাকলেও, ডিভাইস এখনও নির্দিষ্ট কার্যকারিতা চালু করতে কিছু সেন্সর অ্যাক্সেস করতে পারে, যেমন স্ক্রিন রোটেট করা এবং ছবি তোলা। Android 10 ডিভাইসের সব সেন্সর বন্ধ করার জন্য ডেভেলপার বিকল্প সেটিং প্রদান করে। এই ফিচারটি ডেভেলপারদের এমন পরিস্থিতিতে তাদের অ্যাপের কার্যকারিতা পরীক্ষা করতে সাহায্য করে যেখানে সেইসব সেন্সর উপলভ্য থাকে না এবং এছাড়াও ব্যবহারকারীদের তাদের ডিভাইসে সেন্সর নিয়ন্ত্রণ করার একটি উপায় দেয়।
ডেভেলপার বা ব্যবহারকারী ডেভেলপার
বিকল্পে (সেটিংস > সিস্টেম >
ডেভেলপার বিকল্প > দ্রুত সেটিংস ডেভেলপার
টাইল) সেন্সর বন্ধ করুন বিকল্প চালু করলে, দ্রুত সেটিংস ট্রেতে একটি নতুন টাইল দেখা যায়। SensorManager ক্লাস ম্যানেজ করে এমন ক্যামেরা, মাইক্রোফোন ও সব সেন্সর
অ্যাপ যাতে অ্যাক্সেস করতে না পারে, তার জন্য তারা
টাইল ব্যবহার করতে পারবেন।
সতর্কতা: এই বিকল্পটি শুধুমাত্র সেইসব অ্যাপকে প্রভাবিত করে যেগুলি `SensorService`, `CameraService` এবং `AudioPolicyService`-এর মাধ্যমে সেন্সর অ্যাক্সেস করে। টেলিফোনি ফাংশন `AudioPolicyService` ব্যবহার করে না এবং ফোন কল চলাকালীন এখনও মাইক্রোফোনে অ্যাক্সেস আছে।
প্রয়োগ
Android 10-এ একটি রেফারেন্স ইমপ্লিমেন্টেশন আছে যা
ক্যামেরা, মাইক্রোফোন ও SensorManager সেন্সর ম্যানেজ করে। সেন্সর বন্ধ স্টেট ম্যানেজ করে এবং
স্টেট পরিবর্তন সম্পর্কে ক্লায়েন্টদের বিজ্ঞপ্তি পাঠায় এমন
সিস্টেম পরিষেবা
frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java-এ অবস্থিত।
অ্যাপ্লিকেশনের কনটেক্সটের মধ্যে SensorPrivacyService-এ অ্যাক্সেস প্রদানকারী ম্যানেজার
frameworks/base/core/java/android/hardware/SensorPrivacyManager.java-এ
অবস্থিত।
আপনার ডিভাইসে SensorService,
CameraService ও AudioPolicyService-এর ডিফল্ট প্রয়োগ ব্যবহার করা হলে, রেফারেন্স
ডিজাইনে অতিরিক্ত কাস্টমাইজেশন করার প্রয়োজন নেই। আপনার কাছে অন্য
সেন্সর থাকলে, এই ফিচার কাজ করে এমন ডিভাইস সম্পর্কে আরও
জানতে কাস্টমাইজেশন দেখুন।
সাধারণ সমস্যা
এই ফিচার প্রয়োগ করার সময়, কখনও কখনও ক্যামেরা অ্যাপ onError কলব্যাককে সঠিকভাবে উত্তর দেয় না।
ক্যামেরা প্রথমবার অ্যাক্সেস করার চেষ্টা করার সময় এবং ক্যামেরা আর উপলভ্য না থাকার সময়, এই দুটি ক্ষেত্রেই এমন হয়।
এর ফলে সাধারণত
এই টাইল চালু করা হলে অ্যাপ ক্র্যাশ করে, কিন্তু এটি একটি সিগন্যাল হিসেবে ব্যবহার করা যেতে পারে
যা থেকে বোঝা যায় যে ফিচারটি প্রত্যাশিত আচরণ করছে।
এই আচরণ থেকে বোঝা যায় যে অ্যাপটি
onError কলব্যাক
CameraDevice.StateCallback সঠিকভাবে হ্যান্ডেল করছে না। সেন্সর বন্ধ
চালু করা থাকলে, onError কলব্যাক
CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
ত্রুটি মান হিসেবে সেট করা সহ
ইনভোক করা হয়। পরবর্তী
openCamera কল সফল না হওয়া পর্যন্ত
CameraDevice-এর বিরুদ্ধে কোনও পরবর্তী
কল না করে এই ভ্যালু সহ
onError কলব্যাক হ্যান্ডেল করতে যেকোনও ফার্স্ট-পার্টি অ্যাপ আপডেট করুন।
সেন্সর সম্পর্কিত বিকল্প
সেন্সর বন্ধ বিকল্প চালু করা থাকলে, সেন্সর সিস্টেম বা অ্যাপে কোনও ডেটা
রিপোর্ট করা বন্ধ করে দেয়। সেন্সর বন্ধ করুন বিকল্প চালু থাকলেও, কোনও অ্যাপ এখনও সেন্সরের জন্য অনুরোধ করতে এবং একটি
লিসনার রেজিস্টার করতে পারে, কিন্তু মাইকের জন্য হয় সাইলেন্স
রিটার্ন করা হয় অথবা সেন্সরের জন্য onSensorChanged কলব্যাক কখনও
ইনভোক করা হয় না। টাইল বন্ধ করার সাথে সাথেই, সেই একই শ্রোতারা
মাইক থেকে আসল আউটপুট বা onSensorChanged-এ প্রত্যাশিত কলব্যাক
পেতে শুরু করেন, এর জন্য অতিরিক্ত কোনও কাজ করতে হয় না। সাইলেন্স করা সেন্সরের
ডিফল্ট আচরণ নিচে দেওয়া হল।
ক্যামেরা
সেন্সর বন্ধ চালু থাকা অবস্থায় কোনও অ্যাপ ক্যামেরা ব্যবহার করলে,
onError কলব্যাক পদ্ধতিতে একটি সমস্যা পাঠানো হয় এবং
CameraDevice বন্ধ হয়ে যায়।
সেন্সর বন্ধ চালু থাকাকালীন কোনও অ্যাপ ক্যামেরা অ্যাক্সেস করার চেষ্টা করলে, onError কলব্যাক পদ্ধতিতে একটি সমস্যা সংক্রান্ত মেসেজ পাঠানো হয়।
মাইক্রোফোন
সেন্সর বন্ধ করা বিকল্প চালু করা থাকলেও, মাইক্রোফোন অ্যাক্সেস করা সম্ভব, তবে কোনও উত্তর দেওয়া হয় না। সেন্সর বন্ধ চালু থাকা অবস্থায় কোনও অ্যাপ মাইক্রোফোন ব্যবহার করলে, কোনও সমস্যা তৈরি হয় না, কিন্তু রেকর্ডিং সাইলেন্স হয়ে যায় এবং শুধু শূন্যের একটি অ্যারে রিটার্ন করে। অ্যাপটি এখনও মাইক্রোফোন ব্যবহার করার সময় সেন্সর বন্ধ বিকল্পটি বন্ধ করা থাকলে, প্রত্যাশিত অডিও ডেটা ফেরত দেওয়া হয়।
সেন্সর বন্ধ চালু থাকাকালীন কোনও অ্যাপ মাইক্রোফোন অ্যাক্সেস করার চেষ্টা করলে, মাইক্রোফোন থেকে কোনও আওয়াজ পাওয়া যায় না।
সেন্সর
সেন্সর বন্ধ করা ফিচার চালু থাকাকালীন কোনও অ্যাপ অন্য সেন্সর অ্যাক্সেস করার চেষ্টা করলে, সেন্সরের ধরন ডিফল্ট আচরণকে প্রভাবিত করে:
- অবিরাম সেন্সর: এই রিপোর্টিং মোডে থাকা সেন্সর ইভেন্ট ডিসপ্যাচ করা বন্ধ করে দেয়। সেন্সর বন্ধ চালু থাকা অবস্থায় কোনও অ্যাপ যদি একটানা সেন্সরের সাথে ইন্টার্যাক্ট করে, তাহলে ফিচারটি বন্ধ না হওয়া পর্যন্ত সেন্সরটি অ্যাপে কোনও অতিরিক্ত ডেটা পাঠায় না।
- ফ্লাশ ইভেন্ট: টাইল চালু থাকলে সেন্সর ফ্লাশের অনুরোধ করা যেতে পারে
এবং অনুরোধ করা ফ্লাশ সফলভাবে সম্পূর্ণ হয়েছে তা নির্দেশ করার জন্য
onFlushCompleteকলব্যাক চালু করা হয়, কিন্তু সেন্সর ডেটা সহ কোনও নতুন ইভেন্ট তৈরি হয় না এবংonSensorChangedকলব্যাকে ফেরত পাঠানো হয়। - পরিবর্তন সংক্রান্ত ইভেন্ট: সেন্সর বন্ধ বিকল্প চালু করা থাকলে পরিবর্তন সংক্রান্ত কোনও নতুন ইভেন্ট রিপোর্ট করা হয় না।
- ট্রিগার ইভেন্ট: সেন্সর বন্ধ বিকল্প চালু করা থাকলে ট্রিগার ইভেন্ট তৈরি হওয়া বন্ধ হয়ে যায়। আগে থেকে থাকা যেকোনও ইভেন্ট সম্পূর্ণ করুন।
কাস্টমাইজেশন
আপনার ডিভাইস যদি SensorService, CameraService এবং
AudioPolicyService-এর ডিফল্ট ইমপ্লিমেন্টেশন ব্যবহার করে, তাহলে রেফারেন্স ডিজাইনে
অতিরিক্ত কোনও কাস্টমাইজেশন করার
প্রয়োজন নেই। তবে, আপনি SensorManager-এর বাইরে ম্যানেজ করা সেন্সর
সাপোর্ট করতে, আপনার ডিভাইস থেকে সেন্সর বন্ধ করুন
বিকল্প সরিয়ে দিতে অথবা ডেভেলপার দ্রুত সেটিংসের জন্য সিস্টেম UI পরিবর্তন করতে
পারেন। এর মধ্যে সেন্সর বন্ধ করুন টাইল বা আইকন অন্তর্ভুক্ত।
আরও বেশি সেন্সর কাজ করলে ভালো হয়
আপনার ডিভাইসে SensorManager-এর বাইরে ম্যানেজ করা সেন্সর থাকলে,
SensorPrivacyService ও
SensorPrivacyManager ব্যবহার করে সেগুলির জন্য সহায়তা যোগ করতে হবে।
সেন্সর বন্ধ টাইল টগল করা হলে,
SensorPrivacyService সব রেজিস্টার করা শ্রোতার জন্য
একমুখী কলব্যাক ইনভোক করে। এই কলব্যাক পাওয়া গেলে, রেজিস্টার করা লিসেনার টাইলের অবস্থার উপর ভিত্তি করে
প্রয়োজনীয় পদক্ষেপ নিতে পারে। এটি চালু করা থাকলে, সব
আগে থেকে থাকা কানেকশন বন্ধ করে দেওয়া যেতে পারে এবং খালি ডেটা ফেরত দিতে পারে এবং নতুন কানেকশন
প্রতিরোধ করার জন্য একটি ফ্ল্যাগ সেট করা হয়। এটি বন্ধ করা থাকলে, নতুন কানেকশনের অনুমতি দিতে
ফ্ল্যাগ রিসেট করা যেতে পারে। ক্যামেরা পরিষেবা
(platform/frameworks/av/services/camera/libcameraservice/)
ব্যবহার করে, নতুন সেন্সরের জন্য সহায়তা যোগ করতে এইসব ধাপ অনুসরণ করুন।
BnSensorPrivacyListenerইন্টারফেস প্রয়োগ করুন। আরও বিবরণ পেতে,SensorPrivacyPolicy-এCameraService.hদেখুন।SensorPrivacyManager-এর সাথে রেজিস্টার করুন এবং স্টার্ট-আপে টাইলটির স্টেট পান। আরও জানতে,CameraService.cpp-এSensorPrivacyPolicy::registerSelfদেখুন।- কলব্যাকে সেন্সর বন্ধ করা সংক্রান্ত স্ট্যাটাস পরিবর্তন হ্যান্ডেল করুন। আরও
বিবরণ পেতে,
SensorPrivacyPolicy::onSensorPrivacyChangedএবংCameraService::blockAllClients-এরCameraService.cppদেখুন। - টাইল চালু থাকলে সেন্সর ডেটা অ্যাক্সেস করা আটকান। আরও
বিবরণ পেতে, সেন্সর গোপনীয়তা নীতি চেক-ইন
CameraService::validateClientPermissionsLocked-এCameraService.cppদেখুন।
সেন্সর বন্ধ করা
পরীক্ষা করার জন্য ডেভেলপার টুল হিসেবে, সেন্সর বন্ধ লুকানো থাকে কারণ ব্যবহারকারীকে প্রথমে ডেভেলপার মোড চালু করতে হবে, তারপর সেটিংসে টাইল উপলভ্য করার জন্য বেছে নিতে হবে।
আপনার ডিভাইসে সেন্সর বন্ধ করা ফিচার কাজ করুক, তা না চাইলে,
packages/apps/Settings/AndroidManifest.xml থেকে সার্ভিস ট্যাগ সরিয়ে দিন।
আপনি
পরিষেবা ট্যাগ সরিয়ে দিলে, ডেভেলপার কুইক সেটিংস টাইল পৃষ্ঠা থেকে সেন্সর বন্ধ টাইল চালু করার জন্য
উপলভ্য থাকবে না।
'সেন্সর বন্ধ করুন' UI পরিবর্তন করা
সেন্সর বন্ধ UI-এর জন্য দুটি এলিমেন্ট কাস্টমাইজ করা যেতে পারে: ডেভেলপার কুইক সেটিংস টাইলের জন্য দেখানো আইকন এবং টাইল চালু করা থাকলে স্ট্যাটাস বারে দেখানো আইকন। এইসব আইকনের লুক কাস্টমাইজ করতে, এইসব ফাইল পাল্টে দিন:
- দ্রুত সেটিংস টাইল আইকন:
packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml - স্ট্যাটাস বার আইকন:
frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml
যাচাইকরণ
ঐচ্ছিক ডেভেলপার টুল হিসেবে, এই ফিচারের জন্য কোনও CTS পরীক্ষা নেই।
আপনি Google Play থেকে এমন একটি অ্যাপ ইনস্টল করে ম্যানুয়ালি পরীক্ষা করতে পারেন যা ডিভাইসের সব সেন্সর রিড ও ডিসপ্লে করে। আপনি সেন্সর বন্ধ করুন টাইল চালু করলে, নিশ্চিত করুন যে সেন্সরের কোনও ভ্যালু পরিবর্তন হয়নি, মাইক্রোফোন অডিও সাইলেন্ট আছে এবং ক্যামেরা অ্যাক্সেস করা যাচ্ছে না।