Uçak modundayken cihazlar, ekran döndürme ve fotoğraf çekme gibi belirli işlevleri etkinleştirmek için bazı sensörlere erişmeye devam edebilir. Android 10, bir cihazdaki tüm sensörleri kapatmak için bir geliştirici seçenekleri ayarı sağlar. Bu özellik, geliştiricilerin bu sensörlerin kullanılamadığı durumlarda uygulamalarının işlevselliğini test etmesine yardımcı olur ve ayrıca kullanıcılara cihazlarındaki sensörleri kontrol etmeleri için bir yol sunar.
Bir geliştirici veya kullanıcı, geliştirici seçeneklerinde ( Ayarlar > Sistem > Geliştirici seçenekleri > Hızlı ayarlar geliştirici kutucukları ) Sensörler kapalı seçeneğini etkinleştirdiğinde, hızlı ayarlar tepsisinde yeni bir kutucuk görünür. Uygulamaların kameraya, mikrofona ve SensorManager
sınıfı tarafından yönetilen tüm sensörlere erişmesini önlemek için kutucuğu kullanabilirler.
Uyarı: Bu seçenek yalnızca sensörlere "SensorService", "CameraService" ve "AudioPolicyService" aracılığıyla erişen uygulamaları etkiler. Telefon işlevleri 'AudioPolicyService'i kullanmaz ve telefon görüşmeleri sırasında mikrofona erişmeye devam eder.
Uygulama
Android 10, kamerayı, mikrofonu ve SensorManager
sensörlerini yöneten bir referans uygulaması içerir. Sensörlerin kapalı durumunu yöneten ve istemcilere durum değişikliklerini bildiren sistem hizmeti frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java
konumunda bulunur. Bir uygulamanın bağlamında SensorPrivacyService
erişimi kolaylaştıran yönetici frameworks/base/core/java/android/hardware/SensorPrivacyManager.java
konumunda bulunur.
Cihazlarınız SensorService
, CameraService
ve AudioPolicyService
varsayılan uygulamasını kullanıyorsa referans tasarımında herhangi bir ek özelleştirmeye gerek yoktur. Başka sensörleriniz varsa bu özelliğin desteklenmesi hakkında daha fazla ayrıntı için Özelleştirme bölümüne bakın.
Ortak sorunlar
Bu özelliği uygularken bazen kamera uygulamaları, hem kamerayı ilk kez almaya çalışırken hem de kamera artık kullanılamadığında onError
geri aramalarına düzgün yanıt vermeyebilir. Bu genellikle bu kutucuk etkinleştirildiğinde uygulamanın çökmesine neden olur ancak bu, özelliğin beklendiği gibi davrandığını gösteren bir sinyal olarak kullanılabilir.
Bu davranış, uygulamanın CameraDevice.StateCallback
içindeki onError
geri çağrısını düzgün şekilde işlemediğini gösterir. Sensörler kapalı etkinleştirildiğinde onError
geri araması, CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
hata değeri olarak ayarlanarak çağrılır. Sonraki bir openCamera
çağrısı başarılı olana kadar CameraDevice
karşı herhangi bir sonraki çağrı yapmayarak, onError
geri çağrısını bu değerle işleyecek şekilde birinci taraf uygulamalarını güncelleyin.
Sensör davranışı
Sensörler kapalı etkinleştirildiğinde sensörler sisteme veya uygulamalara herhangi bir veri raporlamayı durdurur. Sensörler kapalı etkinleştirildiğinde bir uygulama yine de bir sensör talep edebilir ve bir dinleyici kaydedebilir, ancak mikrofon için sessizlik döndürülür veya sensörler için onSensorChanged
geri çağrısı hiçbir zaman başlatılmaz. Döşeme devre dışı bırakılır bırakılmaz, aynı dinleyiciler herhangi bir ek iş yapmaya gerek kalmadan mikrofondan gerçek çıkışı veya onSensorChanged
beklenen geri çağrıları almaya başlar. Susturulmuş sensörlerin varsayılan davranışı aşağıdaki gibidir.
Kamera
Sensörler kapalı etkinleştirildiğinde bir uygulama kamerayı kullanıyorsa onError
geri çağırma yöntemine bir hata gönderilir ve CameraDevice
kapatılır.
Sensörler kapalı etkinleştirildiğinde bir uygulama kameraya erişmeye çalışırsa onError
geri çağırma yöntemine bir hata gönderilir.
Mikrofon
Sensörler kapalı etkinleştirildiğinde mikrofona erişim hâlâ mümkündür ancak yalnızca sessizlik sağlanır. Sensörler kapalı etkinleştirildiğinde bir uygulama mikrofonu kullanıyorsa herhangi bir hata oluşmaz ancak kayıt susturulur ve yalnızca bir dizi sıfır döndürür. Uygulama mikrofonu kullanmaya devam ederken Sensörler kapalı devre dışı bırakılırsa beklenen ses verileri döndürülür.
Sensörler kapalı etkinleştirildiğinde bir uygulama mikrofona erişmeye çalışırsa mikrofon sessizliğe döner.
Sensör
Sensörler kapalı etkinleştirildiğinde bir uygulama diğer sensörlere erişmeye çalıştığında sensör türü varsayılan davranışı etkiler:
- Sürekli sensörler: Bu raporlama modundaki sensörler olay göndermeyi durdurur. Sensörler kapalı etkinleştirildiğinde bir uygulama sürekli bir sensörle etkileşimde bulunuyorsa sensör, özellik devre dışı bırakılana kadar uygulamaya hiçbir ek veri göndermez.
- Yıkama olayları: Kutucuk etkinleştirildiğinde ve istenen temizlemenin başarıyla tamamlandığını belirtmek için
onFlushComplete
geri çağrısı çağrıldığında bir sensör temizlemesi istenebilir, ancak sensör verileriyle yeni olaylar oluşturulmaz veonSensorChanged
geri çağrısına döndürülmez. - Değişiklik durumunda olaylar: Sensörler kapalı etkinleştirildiğinde, yeni değişiklik olayları raporlanmaz.
- Olayları tetikle: Sensörler kapalı etkinleştirildiğinde, tetikleyici olayların oluşturulması durdurulur. Mevcut etkinlikler tamamlandı.
Özelleştirme
Cihazlarınız SensorService
, CameraService
ve AudioPolicyService
varsayılan uygulamasını kullanıyorsa referans tasarımında herhangi bir ek özelleştirmeye gerek yoktur. Ancak, SensorManager
dışında yönetilen sensörleri destekleyebilir, cihazlarınızdan Sensörleri kaldırabilir veya geliştirici hızlı ayar kutucukları için Sistem Kullanıcı Arayüzünü veya Sensörler kapalı kutucuğu simgesini değiştirebilirsiniz.
Daha fazla sensörü destekleyin
Cihazlarınız SensorManager
dışında yönetilen sensörler içeriyorsa, SensorPrivacyService
ve SensorPrivacyManager
kullanarak onlar için destek eklemelisiniz.
Sensörler kapalı kutucuğu değiştirildiğinde, SensorPrivacyService
tüm kayıtlı dinleyiciler için tek yönlü bir geri arama başlatır. Bu geri arama alındığında kayıtlı dinleyici kutucuğun durumuna göre gerekli adımları atabilir. Etkinleştirilirse, mevcut tüm bağlantılar sonlandırılabilir ve boş veriler döndürülebilir ve yeni bağlantıları önlemek için bir bayrak ayarlanabilir. Devre dışı bırakılırsa, yeni bağlantılara izin vermek için bayrak sıfırlanabilir. Örnek olarak kamera hizmetini ( platform/frameworks/av/services/camera/libcameraservice/
) kullanarak, yeni bir sensöre destek eklemek için bu adımları izleyin.
-
BnSensorPrivacyListener
arayüzünü uygulayın. Daha fazla ayrıntı içinCameraService.h
SensorPrivacyPolicy
bakın. -
SensorPrivacyManager
kaydolun ve başlangıçta kutucuğun durumunu öğrenin. Daha fazla ayrıntı içinCameraService.cpp
SensorPrivacyPolicy::registerSelf
bakın. - Geri aramada Sensörlerin kapalı durum değişikliklerini ele alın. Daha fazla ayrıntı için,
CameraService.cpp
SensorPrivacyPolicy::onSensorPrivacyChanged
veCameraService::blockAllClients
bakın. - Kutucuk etkinleştirildiğinde sensör verilerine erişimi engelleyin. Daha fazla ayrıntı için
CameraService.cpp
CameraService::validateClientPermissionsLocked
sensör gizlilik politikası kontrolüne bakın.
Sensörleri Kaldır kapalı
Test amaçlı bir geliştirici aracı olarak Sensörler kapalı olarak gizlenir; çünkü kullanıcının önce geliştirici modunu etkinleştirmesi, ardından ayarlarda kutucuğu kullanılabilir hale getirmesi gerekir.
Cihazlarınızda Sensörlerin kapalı olmasını desteklemek istemiyorsanız packages/apps/Settings/AndroidManifest.xml
dosyasından hizmet etiketini kaldırın. Servis etiketini kaldırırsanız Sensörler kapalı kutucuğu, geliştirici hızlı ayarlar kutucukları sayfasından etkinleştirilemez.
Sensörleri kullanıcı arayüzünden değiştirin
Sensörler kapalı kullanıcı arayüzü için özelleştirilebilecek iki öğe vardır: geliştirici hızlı ayarlar kutucuğu için görüntülenen simge ve kutucuk etkinleştirildiğinde durum çubuğunda görüntülenen simge. Bu simgelerin görünümünü özelleştirmek için şu dosyaları değiştirin:
- Hızlı ayarlar kutucuğu simgesi:
packages/apps/Settings/res/drawable/tile_icon_sensors_off.xml
- Durum çubuğu simgesi:
frameworks/base/packages/SystemUI/res/drawable/stat_sys_sensors_off.xml
Doğrulama
İsteğe bağlı bir geliştirici aracı olarak bu özelliğe yönelik CTS testleri yoktur.
Google Play'den cihazın tüm sensörlerini okuyan ve görüntüleyen bir uygulamayı yükleyerek manuel olarak test yapabilirsiniz. Sensörler kapalı kutucuğunu etkinleştirdiğinizde, sensör değerlerinin hiçbirinin değişmediğinden, mikrofon sesinin sessiz olduğundan ve kameraya erişilemediğinden emin olun.