Sensörler kapalı

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 ve onSensorChanged 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.

  1. BnSensorPrivacyListener arayüzünü uygulayın. Daha fazla bilgi için CameraService.h'daki SensorPrivacyPolicy bölümüne bakın.
  2. SensorPrivacyManager'e kaydolun ve başlangıçta kartın durumunu öğrenin. Daha fazla bilgi için CameraService.cpp bölümündeki SensorPrivacyPolicy::registerSelf bölümüne bakın.
  3. 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ündeki SensorPrivacyPolicy::onSensorPrivacyChanged ve CameraService::blockAllClients bölümlerine bakın.
  4. Kart etkinleştirildiğinde sensör verilerine erişimi engelleyin. Daha fazla bilgi için CameraService::validateClientPermissionsLocked'teki CameraService.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.