हवाई जहाज़ मोड में होने पर, डिवाइस विशिष्ट कार्यक्षमता को सक्षम करने के लिए कुछ सेंसर तक पहुंच सकते हैं, जैसे स्क्रीन रोटेशन और चित्र लेना। एंड्रॉइड 10 एक डिवाइस में सभी सेंसर को बंद करने के लिए डेवलपर विकल्प सेटिंग प्रदान करता है। यह सुविधा डेवलपर्स को उन स्थितियों में अपने ऐप की कार्यक्षमता का परीक्षण करने में मदद करती है जहां वे सेंसर अनुपलब्ध हो जाते हैं, और उपयोगकर्ताओं को अपने डिवाइस में सेंसर को नियंत्रित करने का एक तरीका भी देता है।
जब कोई डेवलपर या उपयोगकर्ता डेवलपर विकल्पों ( सेटिंग्स > सिस्टम > डेवलपर विकल्प > त्वरित सेटिंग्स डेवलपर टाइल्स ) में सेंसर को सक्षम करता है, तो त्वरित सेटिंग्स ट्रे में एक नई टाइल दिखाई देती है। वे ऐप्स को कैमरा, माइक्रोफ़ोन और SensorManager
वर्ग द्वारा प्रबंधित सभी सेंसर तक पहुंचने से रोकने के लिए टाइल का उपयोग कर सकते हैं।
चेतावनी: यह विकल्प केवल उन ऐप्स को प्रभावित करता है जो `SensorService`, `CameraService`, और `AudioPolicyService` के माध्यम से सेंसर तक पहुंचते हैं। टेलीफ़ोनी फ़ंक्शंस `ऑडियोपॉलिसीसर्विस` का उपयोग नहीं करते हैं और फ़ोन कॉल के दौरान अभी भी माइक्रोफ़ोन तक पहुंच होती है।
कार्यान्वयन
एंड्रॉइड 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
कॉलबैक को ठीक से प्रबंधित नहीं कर रहा है। जब सेंसर बंद सक्षम होता है, तो onError
कॉलबैक को CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
ERROR_CAMERA_DISABLED के साथ त्रुटि मान के रूप में सेट किया जाता है। इस मान के साथ onError
कॉलबैक को संभालने के लिए किसी भी प्रथम-पक्ष ऐप को अपडेट करें, जब तक कि बाद में openCamera
कॉल सफल न हो जाए, तब तक CameraDevice
के खिलाफ कोई भी कॉल न करें।
सेंसर व्यवहार
जब सेंसर बंद सक्षम होता है, तो सेंसर सिस्टम या ऐप्स को किसी भी डेटा की रिपोर्ट करना बंद कर देते हैं। सेंसर बंद सक्षम होने पर भी कोई ऐप सेंसर के लिए अनुरोध कर सकता है और श्रोता को पंजीकृत कर सकता है, लेकिन या तो माइक के लिए मौन लौटा दिया जाता है या सेंसर के लिए 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
देखें। - कॉलबैक में सेंसर की स्थिति में बदलाव को संभालें। अधिक जानकारी के लिए,
SensorPrivacyPolicy::onSensorPrivacyChanged
औरCameraService::blockAllClients
CameraService.cpp
में देखें। - टाइल सक्षम होने पर सेंसर डेटा तक पहुंच रोकें। अधिक जानकारी के लिए,
CameraService::validateClientPermissionsLocked
इनCameraService.cpp
में सेंसर गोपनीयता नीति जांच देखें।
सेंसर हटाएँ
परीक्षण के लिए एक डेवलपर टूल के रूप में, सेंसर्स ऑफ छिपा हुआ है क्योंकि उपयोगकर्ता को पहले डेवलपर मोड सक्षम करना होगा, फिर सेटिंग्स में टाइल उपलब्ध कराना चुनना होगा।
यदि आप अपने डिवाइस पर सेंसर का समर्थन नहीं करना चाहते हैं, तो packages/apps/Settings/AndroidManifest.xml
से सर्विस टैग हटा दें। यदि आप सर्विस टैग हटाते हैं, तो सेंसर ऑफ टाइल डेवलपर क्विक सेटिंग्स टाइल्स पेज से सक्षम करने के लिए उपलब्ध नहीं होगा।
यूआई से सेंसर बदलें
दो तत्व हैं जिन्हें सेंसर ऑफ यूआई के लिए अनुकूलित किया जा सकता है: डेवलपर त्वरित सेटिंग्स टाइल के लिए प्रदर्शित आइकन और टाइल सक्षम होने पर स्टेटस बार में प्रदर्शित आइकन। इन आइकनों के स्वरूप को अनुकूलित करने के लिए, इन फ़ाइलों को बदलें:
- त्वरित सेटिंग्स टाइल आइकन:
packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
- स्टेटस बार आइकन:
frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml
मान्यकरण
वैकल्पिक डेवलपर टूल के रूप में, इस सुविधा के लिए कोई सीटीएस परीक्षण नहीं हैं।
आप Google Play से एक ऐप इंस्टॉल करके मैन्युअल रूप से परीक्षण कर सकते हैं जो डिवाइस के सभी सेंसर को पढ़ता और प्रदर्शित करता है। जब आप सेंसर ऑफ टाइल को सक्षम करते हैं, तो सुनिश्चित करें कि सेंसर के लिए कोई भी मान नहीं बदलता है, माइक्रोफ़ोन ऑडियो चुप है, और कैमरा पहुंच योग्य नहीं है।