বিমান মোডে থাকাকালীন, ডিভাইসগুলি এখনও নির্দিষ্ট কার্যকারিতা সক্ষম করতে কিছু সেন্সর অ্যাক্সেস করতে পারে, যেমন স্ক্রীন ঘূর্ণন এবং ছবি তোলা। 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
কলব্যাকগুলিতে সঠিকভাবে সাড়া দেয় না, উভয় ক্ষেত্রেই যখন প্রথম ক্যামেরাটি অর্জন করার চেষ্টা করা হয় এবং যখন ক্যামেরাটি আর উপলব্ধ থাকে না। এই টাইলটি সক্ষম হলে এটি সাধারণত অ্যাপ ক্র্যাশ করে, তবে বৈশিষ্ট্যটি প্রত্যাশা অনুযায়ী আচরণ করছে তা নির্দেশ করার জন্য এটি একটি সংকেত হিসাবে ব্যবহার করা যেতে পারে।
এই আচরণটি নির্দেশ করে যে অ্যাপটি CameraDevice.StateCallback
এ onError
কলব্যাককে সঠিকভাবে পরিচালনা করছে না। সেন্সর বন্ধ চালু থাকলে, ক্যামেরাডিভাইস। স্টেটকলব্যাক CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
ত্রুটি মান হিসাবে সেট করে onError
কলব্যাক আহ্বান করা হয়। পরবর্তী 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
ইন্টারফেস প্রয়োগ করুন। আরও বিস্তারিত জানার জন্য,CameraService.h
এSensorPrivacyPolicy
দেখুন। -
SensorPrivacyManager
এর সাথে নিবন্ধন করুন এবং স্টার্টআপে টাইলের অবস্থা পান। আরও বিস্তারিত জানার জন্য,CameraService.cpp
এSensorPrivacyPolicy::registerSelf
দেখুন। - কলব্যাকের অবস্থার পরিবর্তনগুলি বন্ধ সেন্সরগুলিকে হ্যান্ডেল করুন৷ আরও বিশদ বিবরণের জন্য,
CameraService.cpp
এSensorPrivacyPolicy::onSensorPrivacyChanged
এবংCameraService::blockAllClients
দেখুন। - টাইল সক্রিয় করা হলে সেন্সর ডেটা অ্যাক্সেস প্রতিরোধ করুন। আরও বিশদ বিবরণের জন্য,
CameraService::validateClientPermissionsLocked
inCameraService.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 থেকে একটি অ্যাপ ইনস্টল করে ম্যানুয়ালি পরীক্ষা করতে পারেন যা ডিভাইসের সমস্ত সেন্সর পড়ে এবং প্রদর্শন করে। আপনি যখন সেন্সর অফ টাইল সক্ষম করেন, তখন নিশ্চিত করুন যে সেন্সরগুলির কোনও মান পরিবর্তন না হয়, মাইক্রোফোন অডিও নীরব থাকে এবং ক্যামেরা অ্যাক্সেসযোগ্য নয়৷