सेंसर बंद हैं

हवाई जहाज़ मोड चालू होने पर भी, डिवाइस कुछ सेंसर ऐक्सेस कर सकते हैं, ताकि कुछ खास सुविधाएं चालू की जा सकें. जैसे, स्क्रीन घुमाना और फ़ोटो लेना. 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 कॉलबैक को ठीक से मैनेज नहीं कर रहा है. सेंसर बंद हैं सेटिंग चालू होने पर, onError कॉलबैक को गड़बड़ी की वैल्यू के तौर पर सेट की गई CameraDevice.StateCallback.ERROR_CAMERA_DISABLED के साथ शुरू किया जाता है. पहले पक्ष (ग्राहक) के किसी भी ऐप्लिकेशन को अपडेट करें, ताकि वह इस वैल्यू के साथ onError कॉलबैक को मैनेज कर सके. इसके लिए, CameraDevice के ख़िलाफ़ तब तक कोई और कॉल न करें, जब तक कि openCamera कॉल पूरा न हो जाए.

सेंसर का व्यवहार

सेंसर बंद हैं सेटिंग चालू होने पर, सेंसर सिस्टम या ऐप्लिकेशन को कोई डेटा नहीं भेजते. सेंसर बंद हैं सेटिंग चालू होने पर भी, ऐप्लिकेशन किसी सेंसर का अनुरोध कर सकता है और किसी लिसनर को रजिस्टर कर सकता है. हालांकि, माइक के लिए कोई आवाज़ नहीं सुनाई देती या सेंसर के लिए onSensorChanged कॉलबैक कभी भी ट्रिगर नहीं होता. टाइल बंद होने के बाद, उन दर्शकों को माइक से असल आउटपुट या onSensorChanged को उम्मीद के मुताबिक कॉलबैक मिलना शुरू हो जाता है. इसके लिए, उन्हें कुछ भी करने की ज़रूरत नहीं होती. बंद किए गए सेंसर का डिफ़ॉल्ट व्यवहार इस तरह का होता है.

कैमरा

अगर सेंसर बंद हैं सुविधा चालू होने पर कोई ऐप्लिकेशन कैमरे का इस्तेमाल करता है, तो onError कॉलबैक तरीके को गड़बड़ी का मैसेज भेजा जाता है और CameraDevice बंद हो जाता है.

अगर कोई ऐप्लिकेशन सेंसर बंद है सेटिंग चालू होने पर कैमरे को ऐक्सेस करने की कोशिश करता है, तो onError कॉलबैक तरीके को गड़बड़ी का मैसेज भेजा जाता है.

माइक्रोफ़ोन

सेंसर बंद करें सेटिंग चालू होने पर भी, माइक्रोफ़ोन का ऐक्सेस मिलता है. हालांकि, इससे सिर्फ़ खाली आवाज़ रिकॉर्ड होती है. अगर कोई ऐप्लिकेशन, सेंसर बंद है सेटिंग चालू होने पर माइक्रोफ़ोन का इस्तेमाल कर रहा है, तो कोई गड़बड़ी नहीं होती. हालांकि, रिकॉर्डिंग में आवाज़ नहीं आती और सिर्फ़ शून्यों का कलेक्शन दिखता है. अगर ऐप्लिकेशन अब भी माइक्रोफ़ोन का इस्तेमाल कर रहा है, तो सेंसर बंद करें को बंद करने पर, उम्मीद के मुताबिक ऑडियो डेटा वापस मिलता है.

अगर कोई ऐप्लिकेशन सेंसर बंद है सेटिंग चालू होने पर, माइक्रोफ़ोन को ऐक्सेस करने की कोशिश करता है, तो माइक्रोफ़ोन से कोई आवाज़ नहीं आती.

सेंसर

जब कोई ऐप्लिकेशन, सेंसर बंद हैं सेटिंग चालू होने पर, अन्य सेंसर को ऐक्सेस करने की कोशिश करता है, तो सेंसर टाइप का असर डिफ़ॉल्ट व्यवहार पर पड़ता है:

  • कंटिन्यूस सेंसर: इस रिपोर्टिंग मोड में सेंसर, इवेंट डिस्पैच करना बंद कर देते हैं. अगर कोई ऐप्लिकेशन, सेंसर बंद हैं सुविधा चालू होने पर, लगातार काम करने वाले सेंसर के साथ इंटरैक्ट कर रहा है, तो सेंसर तब तक ऐप्लिकेशन को कोई और डेटा नहीं भेजता, जब तक यह सुविधा बंद नहीं कर दी जाती.
  • इवेंट फ़्लश करना: टाइल चालू होने पर, सेंसर फ़्लश का अनुरोध किया जा सकता है. साथ ही, onFlushComplete कॉलबैक को यह बताने के लिए भी इस्तेमाल किया जा सकता है कि अनुरोध किया गया फ़्लश पूरा हो गया है. हालांकि, सेंसर डेटा के साथ कोई नया इवेंट जनरेट नहीं किया जाता और onSensorChanged कॉलबैक को नहीं दिखाया जाता.
  • बदलाव होने पर सूचना देने वाले इवेंट: सेंसर बंद हैं सेटिंग चालू होने पर, बदलाव होने पर सूचना देने वाले किसी भी नए इवेंट की रिपोर्ट नहीं की जाती.
  • ट्रिगर इवेंट: सेंसर बंद हैं चालू होने पर, ट्रिगर इवेंट जनरेट होना बंद हो जाते हैं. सभी मौजूदा इवेंट पूरे हो गए हों.

पसंद के मुताबिक बनाएं

अगर आपके डिवाइसों में डिफ़ॉल्ट रूप से SensorService, CameraService, और AudioPolicyService का इस्तेमाल किया जाता है, तो रेफ़रंस डिज़ाइन में कोई और बदलाव करने की ज़रूरत नहीं है. हालांकि, SensorManager के बाहर मैनेज किए जाने वाले सेंसर के साथ काम किया जा सकता है. साथ ही, अपने डिवाइसों से सेंसर बंद हैं को हटाया जा सकता है. इसके अलावा, डेवलपर की क्विक सेटिंग टाइल के लिए सिस्टम यूज़र इंटरफ़ेस (यूआई) या सेंसर बंद हैं टाइल के आइकॉन को बदला जा सकता है.

ज़्यादा सेंसर के साथ काम करना

अगर आपके डिवाइसों में ऐसे सेंसर हैं जिन्हें SensorManager के बाहर मैनेज किया जाता है, तो आपको SensorPrivacyService और SensorPrivacyManager का इस्तेमाल करके, उनके लिए सहायता जोड़नी चाहिए.

सेंसर बंद हैं टाइल को टॉगल करने पर, SensorPrivacyService रजिस्टर किए गए सभी लिसनर के लिए एकतरफ़ा कॉलबैक को शुरू करता है. यह कॉलबैक मिलने पर, रजिस्टर किया गया लिसनर, टाइल की स्थिति के आधार पर ज़रूरी कदम उठा सकता है. अगर यह सुविधा चालू है, तो सभी मौजूदा कनेक्शन बंद हो सकते हैं और खाली डेटा दिखाया जा सकता है. साथ ही, नए कनेक्शन को रोकने के लिए एक फ़्लैग सेट किया जा सकता है. अगर यह सुविधा बंद है, तो नए कनेक्शन की अनुमति देने के लिए, फ़्लैग को रीसेट किया जा सकता है. उदाहरण के तौर पर, कैमरा सेवा (platform/frameworks/av/services/camera/libcameraservice/) का इस्तेमाल करके, किसी नए सेंसर के लिए सहायता जोड़ने के लिए यह तरीका अपनाएं.

  1. BnSensorPrivacyListener इंटरफ़ेस लागू करें. ज़्यादा जानकारी के लिए, CameraService.h में SensorPrivacyPolicy देखें.
  2. SensorPrivacyManager के साथ रजिस्टर करें और स्टार्टअप पर टाइल की स्थिति पाएं. ज़्यादा जानकारी के लिए, CameraService.cpp में SensorPrivacyPolicy::registerSelf देखें.
  3. कॉलबैक में, सेंसर बंद हैं स्टेटस में होने वाले बदलावों को मैनेज करें. ज़्यादा जानकारी के लिए, CameraService.cpp में SensorPrivacyPolicy::onSensorPrivacyChanged और CameraService::blockAllClients देखें.
  4. टाइल चालू होने पर, सेंसर डेटा को ऐक्सेस करने से रोकना. ज़्यादा जानकारी के लिए, CameraService.cpp में CameraService::validateClientPermissionsLocked में सेंसर की निजता नीति देखें.

सेंसर बंद हैं को हटाएं

टेस्टिंग के लिए डेवलपर टूल के तौर पर, सेंसर बंद करें विकल्प छिपा होता है. ऐसा इसलिए है, क्योंकि उपयोगकर्ता को पहले डेवलपर मोड चालू करना होगा. इसके बाद, सेटिंग में जाकर टाइल को उपलब्ध कराने का विकल्प चुनना होगा.

अगर आपको अपने डिवाइसों पर सेंसर बंद करें सुविधा का इस्तेमाल नहीं करना है, तो 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 से ऐसा ऐप्लिकेशन इंस्टॉल करके, मैन्युअल तरीके से जांच की जा सकती है जो डिवाइस के सभी सेंसर को पढ़ता और दिखाता है. सेंसर बंद करें टाइल को चालू करने पर, पक्का करें कि सेंसर की कोई भी वैल्यू न बदले, माइक्रोफ़ोन का ऑडियो बंद हो, और कैमरे को ऐक्सेस न किया जा सके.