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

  1. BnSensorPrivacyListener arayüzünü uygulayın. Daha fazla ayrıntı için CameraService.h SensorPrivacyPolicy bakın.
  2. SensorPrivacyManager kaydolun ve başlangıçta kutucuğun durumunu öğrenin. Daha fazla ayrıntı için CameraService.cpp SensorPrivacyPolicy::registerSelf bakın.
  3. Geri aramada Sensörlerin kapalı durum değişikliklerini ele alın. Daha fazla ayrıntı için, CameraService.cpp SensorPrivacyPolicy::onSensorPrivacyChanged ve CameraService::blockAllClients bakın.
  4. 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.