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 geliştirici seçenekleri ayarı sunar. Bu özellik, geliştiricilerin uygulamalarının işlevini bu sensörlerin kullanılamadığı durumlarda test etmesine yardımcı olur ve 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 kutuları) Sensörler kapalı'yı etkinleştirdiğinde hızlı ayarlar tepsisinde yeni bir kutu görünür. Uygulamaların kameraya, mikrofona ve SensorManager
sınıfı tarafından yönetilen tüm sensörlere erişmesini engellemek için bu karttan yararlanabilirler.
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, kamera, mikrofon ve SensorManager
sensörlerini işleyen bir referans uygulama içerir. Sensörler kapalı durumunu yöneten ve istemcileri durum değişiklikleri hakkında bilgilendiren sistem hizmeti frameworks/base/services/core/java/com/android/server/SensorPrivacyService.java
içinde bulunur.
Bir uygulama bağlamında SensorPrivacyService
'e erişimi kolaylaştıran yönetici, frameworks/base/core/java/android/hardware/SensorPrivacyManager.java
'te bulunur.
Cihazlarınızda SensorService
, CameraService
ve AudioPolicyService
'nin varsayılan uygulaması kullanılıyorsa referans tasarımda ek özelleştirme yapılmasına gerek yoktur. Başka sensörleriniz varsa bu özelliğin desteklenmesi hakkında daha fazla bilgi için Özelleştirme bölümüne bakın.
Genel sorunlar
Bu özellik uygulanırken kamera uygulamaları, hem kamerayı ilk kez almaya çalışırken hem de kamera artık kullanılamadığında onError
geri çağırmalarına bazen düzgün yanıt vermez. Bu durum genellikle, kart etkinleştirildiğinde uygulamanın kilitlenmesine neden olur ancak bu durum, özelliğin beklendiği gibi davrandığını gösteren bir sinyal olarak kullanılabilir.
Bu davranış, uygulamanın CameraDevice.StateCallback
içinde onError
geri çağırma işlevini düzgün şekilde işlemediğini gösterir. Sensörler kapalı ayarı etkinleştirildiğinde onError
geri çağırma işlevi, CameraDevice.StateCallback.ERROR_CAMERA_DISABLED
hata değeri olarak ayarlanarak çağrılır. Bir sonraki openCamera
çağrısı başarılı olana kadar CameraDevice
'a başka çağrıda bulunmayarak onError
geri çağırma işlevini bu değerle işleyecek şekilde tüm birinci taraf uygulamaları güncelleyin.
Sensör davranışı
Sensörler kapalı etkinleştirildiğinde sensörler sisteme veya uygulamalara veri bildirmeyi durdurur. Sensörler kapalı etkinleştirildiğinde uygulama yine de sensör isteyebilir ve bir dinleyici kaydedebilir ancak mikrofon için sessizlik döndürülür veya sensörler için onSensorChanged
geri çağırma işlevi hiçbir zaman çağrılmaz. Kart devre dışı bırakılır bırakılmaz, aynı dinleyiciler ek işlem yapmadan mikrofondan gerçek çıkışı veya onSensorChanged
için beklenen geri aramaları almaya başlar. Sessizleştirilen sensörlerin varsayılan davranışı aşağıdaki gibidir.
Kamera
Sensörler kapalı etkinken bir uygulama kamerayı kullanıyorsa onError
geri çağırma yöntemine bir hata gönderilir ve CameraDevice
kapatılır.
Sensörler kapalı etkinken bir uygulama kameraya erişmeye çalışırsa onError
geri çağırma yöntemine bir hata gönderilir.
Mikrofon
Sensörler kapalı etkinleştirildiğinde mikrofon erişimi devam eder ancak yalnızca sessizlik döndürülür. Sensörler kapalı ayarı etkinken bir uygulama mikrofonu kullanıyorsa hata oluşmaz ancak kayıt sessize alınır ve yalnızca sıfır dizisi döndürülü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ı ayarı etkinken bir uygulama mikrofona erişmeye çalışırsa mikrofon sessiz kalır.
Sensör
Sensörler kapalı ayarı etkinken 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 etkinlikleri göndermeyi durdurur. Sensörler kapalı etkinken bir uygulama sürekli bir sensörle etkileşimde bulunuyorsa özellik devre dışı bırakılana kadar sensör uygulamaya ek veri göndermez.
- Etkinlik temizleme: Kart etkinleştirildiğinde bir sensör temizleme isteğinde bulunulabilir ve istenen temizlemenin başarıyla tamamlandığını belirtmek için
onFlushComplete
geri çağırma işlevi çağrılır ancak sensör verileri içeren yeni etkinlik oluşturulmaz veonSensorChanged
geri çağırma işlevine döndürülmez. - Değişiklik etkinliği: Sensörler kapalı etkinleştirildiğinde yeni değişiklik etkinliği raporlanmaz.
- Tetikleyici etkinlikler: Sensörler kapalı etkinleştirildiğinde tetikleyici etkinlikler oluşturulmaz. Mevcut etkinlikler tamamlanır.
Özelleştirme
Cihazlarınızda SensorService
, CameraService
ve AudioPolicyService
'nin varsayılan uygulaması kullanılıyorsa referans tasarımda ek bir özelleştirme gerekmez. Ancak SensorManager
dışında yönetilen sensörleri destekleyebilir, Sensörler kapalı seçeneğini cihazlarınızdan kaldırabilir veya geliştirici hızlı ayar kartları için sistem kullanıcı arayüzünü ya da Sensörler kapalı kartının simgesini değiştirebilirsiniz.
Daha fazla sensör desteği
Cihazlarınızda SensorManager
dışında yönetilen sensörler varsa SensorPrivacyService
ve SensorPrivacyManager
'yi kullanarak bunlar için destek eklemeniz gerekir.
Sensörler kapalı karosu etkinleştirildiğinde SensorPrivacyService
, kayıtlı tüm dinleyiciler için tek yönlü bir geri çağırma işlevi çağırır. Bu geri arama alındığında, kayıtlı dinleyici karonun 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. Ayrıca, yeni bağlantıları engellemek için bir işaret ayarlanır. Etkin değilse yeni bağlantılara izin vermek için işaret sıfırlanabilir. Kamera hizmetini (platform/frameworks/av/services/camera/libcameraservice/
) örnek olarak kullanarak yeni bir sensör desteği eklemek için aşağıdaki adımları uygulayın.
BnSensorPrivacyListener
arayüzünü uygulayın. Daha fazla bilgi içinCameraService.h
'dakiSensorPrivacyPolicy
bölümüne bakın.SensorPrivacyManager
'e kaydolun ve başlangıçta kartın durumunu öğrenin. Daha fazla bilgi içinCameraService.cpp
bölümündekiSensorPrivacyPolicy::registerSelf
bölümüne bakın.- Geri çağırma işlevinde Sensörler kapalı durum değişikliklerini ele alın. Daha fazla bilgi için
CameraService.cpp
bölümündekiSensorPrivacyPolicy::onSensorPrivacyChanged
veCameraService::blockAllClients
bölümlerine bakın. - Kart etkinleştirildiğinde sensör verilerine erişimi engelleyin. Daha fazla bilgi için
CameraService::validateClientPermissionsLocked
'tekiCameraService.cpp
sensör gizlilik politikası kontrolünü inceleyin.
Sensörler kapalı ayarını kaldırma
Test için bir geliştirici aracı olan Sensörler kapalı, kullanıcının önce geliştirici modunu etkinleştirmesi, ardından kartın ayarlarda kullanılabilmesini seçmesi gerektiğinden gizlidir.
Cihazlarınızda Sensörler kapalı özelliğini desteklemek istemiyorsanız hizmet etiketini packages/apps/Settings/AndroidManifest.xml
'den kaldırın. Hizmet etiketini kaldırırsanız Sensörler kapalı kutusu, geliştirici hızlı ayarlar kutuları sayfasından etkinleştirilemez.
Sensörler kapalı kullanıcı arayüzünü değiştirme
Sensörler kapalı kullanıcı arayüzü için özelleştirilebilen iki öğe vardır: geliştirici hızlı ayarlar kartında gösterilen simge ve kart etkinleştirildiğinde durum çubuğunda gösterilen simge. Bu simgelerin görünümünü özelleştirmek için aşağıdaki dosyaları değiştirin:
- Hızlı ayar kutusu 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ı olduğundan bu özellik için CTS testi yoktur.
Google Play'den cihazın tüm sensörlerini okuyup gösteren bir uygulama yükleyerek manuel olarak test edebilirsiniz. Sensörler kapalı kartını etkinleştirdiğinizde, sensörlere ait değerlerin hiçbirinin değişmediğinden, mikrofon sesinin sessiz olduğundan ve kameraya erişilemediğinden emin olun.