2015-05-22 20 views
11

Birçok Android telefonun, screen goes off numaralı telefonu açtığı zaman, ivmeölçeri kapattığı bilinen bir sorundur. Ancak Android Fit (uygulama) ile bir şey değişmiş gibi görünüyor. Fit, ekran kapandığında bile sayım adımlarını korur. Fit yüklü ise, o zaman olaylar Fit ortamında sayma adımı için yetiştirilir ve ben adımlarla Samsung S4 ve OnePlus One'da ve her iki durumda da bu test ettikAdım Sayacı: her zaman açık?

Fitness.SensorsApi.findDataSources(mClient, new DataSourcesRequest.Builder() 
       .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE) 

kullanarak bunları yakalamak mümkün duyuyorum sayılır. Bunu nasıl yapıyorlar? Hangi Android sınıflarını kullanıyorlar? Anlayışım, Kitkat'tan bu yana sunulan mevcut yöntemin bir SensorEventListener uygulamak olduğu. Örneğin, kendine ait bir şey, implements this kodunu sağlar. Ancak, birçok telefonda ekran kapanırken adım sayımı durur. İlginç bir şekilde, Google Fit uygulamasının yüklü olması durumunda sayım durmaz (bu yüzden ivmeölçeri açık tutuyorlar).

Bir şey mi eksik? Ölümcül programcılar için ekran kapandıktan sonra sayım adımlarını tutmanın işlevselliği var mıdır? Teşekkürler!

cevap

7

) Ilja'nın dediği gibi, kodunuz ekran kapatıldıktan sonra da çalışır. Ama bu durumda sanırım biraz farklı bir cevaba ihtiyacımız var.

Kesinlikle wakelock'u tutan bir Servis kullanırlar ve veri için sensörleri sorgularlar. Buradaki önemli kısım wakelock'u tutuyor - bazı verileri kaçırmak istemiyorsanız, servisinizin kullanım ömrü boyunca cihazın uyku moduna geçmesini önlemelisiniz.

Ancak bu yaklaşım pili gerçekten hızlı bir şekilde boşaltacaktır, çünkü adımları algılamak için sensörlerden çok fazla veriyi işlemeniz gerekir. Bu nedenle, sensor batching olduğu anlamına gelir. Bu, cihazı uyandırmadan bile sürekli sensör verisi almanızı sağlar. Temel olarak algılayıcı olaylarını çipin kendisinde bir hw tabanlı kuyruğa kaydeder ve sadece bunları uygulamalarınıza (hizmet, ..) toplu olarak önceden tanımlanmış aralıklarla gönderir. Bu, bataryayı önemli ölçüde boşaltmadan 7/24 izleme yapmanızı sağlar. Sadece desteklenen yonga setlerinin bunu yapabildiğini (Android dokümanlarındaki detayları bulabilirsiniz), daha eski telefonlarda verilerinizi almak için saklı wakelock saklama yöntemine geri dönmeniz gerektiğini unutmayın.

Ayrıca, yalnızca Google Fit APIs'u da kullanabilirsiniz, ancak bu, yalnızca izleme özelliği açık olan cihazda hem Google Fit + Google Play Hizmetleri'nin yüklü olduğu durumlarda çalışır.

+0

Teşekkürler @simekadam. Söylediklerin doğru. Ancak anlamadığım şey, nasıl yaptıklarını. Pek çok telefonda adım sayacı tutmak için görebildiğim tek yol, gerçekten enerji verimli olmayan tam bir kilit elde etmektir. WakefulBroadcastReceiver gibi kısmi uyanıklar çoğu hızölçer tarafından yok sayılıyor. İşte bu yüzden bunu nasıl verimli bir şekilde yaptıklarını merak ediyorum. – FabioC

+0

@FabioCiravegna, sorunuza daha fazla kod gönderebilir misiniz? Bu, sorununuzu çözmeme yardımcı olabilir .. Bir üşüdünüzü bir WakefulBroadcastReceiver'dan başlatıyor musunuz?Kayıt hizmetinize startWakefulService ile başlıyor musunuz? Hizmetiniz için ayrılmış bir wakelock edinir misiniz? (WakeFullBroadcastReceiver, 60 saniye sonra wakelock'ı serbest bırakıyor) – simekadam

+0

yardım etmeyi teklif ettiğiniz için çok teşekkürler. [Link] (https://github.com/fabcira/step_counter_with_wakeLock) Github hakkında basit bir örnek oluşturdum. Daha önce bahsettiğimden daha basit. Ana Aktivite sensörü kaydeder ve kısmi bir uyanıklık oluşturur. Sonra aktiviteyi başlatırım. Step_counter çalışır. Telefonu kapattığımda durur. Ancak, wakeLock açık olup olmadığını denetleyen bir hizmet oluşturdum. Bu. Ama adım sayacı kapalı. Kurulum ayrıca telefonun donanım adım sayacına sahip olup olmadığını kontrol eder. Benimki var. Şaşkınım. Herhangi bir yardım edilir. Teşekkürler! – FabioC

0

Her normal Konu ekranı çaldığında çalışmaya devam veya Aktivite odağını kaybetmiş ... ama etkinlik daha sonra öldürüldüğünde bütün iplik ... öldürüldüğünde

için hizmetlerini kullanabilirsiniz Ancak

ivmeölçümünü sormak gibi uzun süreli görevler (örneğin,

+0

Cevabınız için teşekkür ederiz. Arka plan hizmetleri kullanıyorum, böylece uygulama odağı kaybettiğinde hala çalışıyorlar. Bu süreçte hem adım sayacı hem de etkinlik tanımayı kullanıyorum. Etkinlik tanıma devam ediyor. Adım sayacı öldürüldü. – FabioC