חיישנים כבויים

במצב טיסה, מכשירים עדיין יכולים לגשת לחיישנים מסוימים כדי לאפשר פונקציונליות ספציפית, כגון סיבוב מסך וצילום תמונות. אנדרואיד 10 מספקת הגדרת אפשרויות למפתחים לכיבוי כל החיישנים במכשיר. תכונה זו עוזרת למפתחים לבחון את הפונקציונליות של האפליקציה שלהם במצבים שבהם חיישנים אלה הופכים לא זמינים, וכן נותנת למשתמשים דרך לשלוט בחיישנים במכשיר שלהם.

כאשר מפתח או משתמש מפעילים חיישנים באפשרויות מפתחים ( הגדרות > מערכת > אפשרויות מפתחים > אריחי מפתח הגדרות מהירות ), אריח חדש מופיע במגש ההגדרות המהירות. הם יכולים להשתמש באריח כדי למנוע מאפליקציות לגשת למצלמה, למיקרופון ולכל החיישנים המנוהלים על ידי מחלקת SensorManager .

אזהרה: אפשרות זו משפיעה רק על אפליקציות שניגשים לחיישנים דרך `SensorService`, `CameraService` ו-`AudioPolicyService`. פונקציות הטלפוניה אינן משתמשות ב-'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 , הן בעת ​​ניסיון ראשון לרכוש את המצלמה והן כאשר המצלמה אינה זמינה עוד. זה גורם בדרך כלל לקריסה של האפליקציה כאשר האריח הזה מופעל, אבל זה יכול לשמש כאות לציון שהתכונה מתנהגת כמצופה.

התנהגות זו מציינת שהאפליקציה אינה מטפלת כראוי בהתקשרות חוזרת onError ב- CameraDevice.StateCallback . כאשר החיישנים כבויים מופעל, החזרת onError מופעל כאשר CameraDevice.StateCallback.ERROR_CAMERA_DISABLED מוגדר כערך השגיאה. עדכן כל אפליקציות של צד ראשון כדי לטפל בהתקשרות חוזרת onError עם ערך זה על ידי אי ביצוע שיחות עוקבות נגד CameraDevice עד שהשיחה openCamera הבאה תצליח.

התנהגות חיישן

כאשר חיישנים כבויים מופעל, החיישנים מפסיקים לדווח על נתונים כלשהם למערכת או לאפליקציות. אפליקציה עדיין יכולה לבקש חיישן ולרשום מאזין כשהחיישנים כבויים מופעלים, אבל או שקט מוחזר עבור המיקרופון או שההתקשרות חוזרת onSensorChanged לעולם אינה מופעלת עבור החיישנים. ברגע שהאריח מושבת, אותם מאזינים מתחילים לקבל את הפלט בפועל מהמיקרופון או את ההתקשרויות הצפויות ל- onSensorChanged ללא צורך לבצע עבודה נוספת. התנהגות ברירת המחדל של חיישנים מושתקים היא כדלקמן.

מַצלֵמָה

אם אפליקציה משתמשת במצלמה כאשר חיישנים כבויים מופעל, שגיאה נשלחת לשיטת החזרה onError ו- CameraDevice נסגר.

אם אפליקציה מנסה לגשת למצלמה כשהחיישנים כבויים מופעלים, נשלחת שגיאה לשיטת onError callback.

מִיקרוֹפוֹן

כאשר חיישנים כבויים מופעל, גישה למיקרופון עדיין אפשרית אך רק הדממה מוחזרת. אם אפליקציה משתמשת במיקרופון כאשר חיישנים כבויים מופעל, לא נוצרת שגיאה, אבל ההקלטה מושתקת ורק מחזירה מערך של אפסים. אם חיישנים כבויים מושבתים בזמן שהאפליקציה עדיין משתמשת במיקרופון, נתוני האודיו הצפויים יוחזרו.

אם אפליקציה מנסה לגשת למיקרופון כאשר חיישנים כבויים מופעל, המיקרופון מחזיר דממה.

חיישן

כאשר אפליקציה מנסה לגשת לחיישנים אחרים כאשר חיישנים כבויים מופעל, סוג החיישן משפיע על התנהגות ברירת המחדל:

  • חיישנים רציפים: חיישנים במצב דיווח זה מפסיקים לשלוח אירועים. אם אפליקציה מקיימת אינטראקציה עם חיישן רציף כאשר חיישנים כבויים מופעל, החיישן לא שולח נתונים נוספים לאפליקציה עד שהפיצ'ר מושבת.
  • אירועי שטיפה: ניתן לבקש שטיפה של חיישן כאשר האריח מופעל ו- onFlushComplete callback מופעל כדי לציין שהשטיקה המבוקשת הושלמה בהצלחה, אך לא נוצרים אירועים חדשים עם נתוני חיישן ומוחזרים ל- onSensorChanged callback.
  • אירועי שינוי: כאשר חיישנים כבויים מופעל, לא מדווחים אירועי שינוי חדשים.
  • אירועי טריגר: כאשר חיישנים כבויים מופעל, אירועי טריגר מפסיקים להיווצר. כל אירועים קיימים הושלם.

התאמה אישית

אם המכשירים שלך משתמשים ביישום ברירת המחדל של SensorService , CameraService ו- AudioPolicyService , אין צורך בהתאמה אישית נוספת לעיצוב ההתייחסות. עם זאת, אתה יכול לתמוך בחיישנים המנוהלים מחוץ ל- SensorManager , להסיר חיישנים כבויים מהמכשירים שלך, או לשנות את ממשק המשתמש של המערכת עבור אריחי ההגדרות המהירות של המפתחים או את הסמל עבור אריח החיישנים כבוי .

תמיכה בחיישנים נוספים

אם המכשירים שלך מכילים חיישנים המנוהלים מחוץ ל- SensorManager , עליך להוסיף תמיכה עבורם באמצעות SensorPrivacyService ו- SensorPrivacyManager .

כאשר אריח החיישנים כבוי מוחלף, SensorPrivacyService מפעיל התקשרות בכיוון אחד לכל המאזינים הרשומים. כאשר התקשרות חוזרת זו מתקבלת, המאזין הרשום יכול לבצע את הצעדים הדרושים בהתבסס על מצב האריח. אם זה מופעל, ניתן לסיים את כל החיבורים הקיימים ולהחזיר נתונים ריקים, ולהגדיר דגל כדי למנוע חיבורים חדשים. אם הוא מושבת, ניתן לאפס את הדגל כדי לאפשר חיבורים חדשים. באמצעות שירות המצלמה ( platform/frameworks/av/services/camera/libcameraservice/ ) כדוגמה, בצע את השלבים הבאים כדי להוסיף תמיכה בחיישן חדש.

  1. הטמע את ממשק BnSensorPrivacyListener . לפרטים נוספים, ראה SensorPrivacyPolicy ב- CameraService.h .
  2. הירשם עם SensorPrivacyManager וקבל את מצב האריח בעת ההפעלה. לפרטים נוספים, ראה SensorPrivacyPolicy::registerSelf ב- CameraService.cpp .
  3. טפל בשינויי מצב חיישנים בהתקשרות חזרה. לפרטים נוספים, ראה SensorPrivacyPolicy::onSensorPrivacyChanged ו- CameraService::blockAllClients ב- CameraService.cpp .
  4. מנע גישה לנתוני החיישן כאשר האריח מופעל. לפרטים נוספים, עיין בבדיקת מדיניות הפרטיות של החיישן ב- 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

מַתַן תוֹקֵף

ככלי מפתח אופציונלי, אין בדיקות CTS עבור תכונה זו.

ניתן לבצע בדיקה ידנית על ידי התקנת אפליקציה מ-Google Play שקוראת ומציגה את כל חיישני המכשיר. כאשר אתה מפעיל את אריח החיישנים כבוי , ודא שאף אחד מהערכים עבור החיישנים לא משתנה, האודיו של המיקרופון שקט והמצלמה אינה נגישה.