HarmonyOS Sensör Verisi Okuma (Java)

Sertaç Ayhan
Huawei Developers - Türkiye
3 min readJun 21, 2022
HarmonyOS

Giriş

Merhaba arkadaşlar, bu yazımda Java ile HarmonyOS projesinde cihazdaki sensörleri nasıl okur ve ekranda gösteririz sorusunun cevabını vermeye çalışacağım. Umarım faydalı olur, keyifli okumalar :)

İmplementasyon

İlk önce yapacağımız sensör okuma uygulaması için izinleri alalım. Bu izinler activity motion ve read health data izinleri olacak. reqPermissions altında izinlerimi config.json dosyasına ekledim. HarmonyOS ekosistemindeki diğer sensörleri ve izinleri inceyelebilmeniz için aşağıya link bıraktım, göz atmayı unutmayın.

config.json

Daha detaylı bilgi için bu dokümanları kullanabilirsiniz:

Sensors Overview

Permission Development Guidelines

Layout

ability_main.xml

Layout’umzda başlığımız için bir adet text view’imiz, sensörlere erişebilmek için bir adet subscribe adında butonumuz, kalp atışını temsil için bir adet image view’imiz(kalp) ve bunun değerini ekrana basabilmemiz için text_rate adında bir adet text view’imiz aynı şekilde attığımız adım sayısı için bir adet image view’imiz(ayak) ve bir adet text_step adında text view’imiz bulunmaktadır. Bu layoutu oluşturabilmek için en kolay yöntemlerden biri olan Directional Layout’u kullandım. Bu layout Android geliştirmede LinearLayouta karşılık geliyor :)

MainAbility

En kısa şekilde açıklamak gerekirse Main Ability, Android uygulama geliştirirken kullandığımız Activity’e çok benzer bir yapıda ve benzer bir lifecycle’a sahip bir class’tır.

MainAbilitySlice

Yine çok kısa açıklamak gerekirse Ability Slice ise Android uygulama geliştirirken kullandığımız Fragment’a benzemekte. Biz bütün işlerimizi Ability Slice üzerinden yürütmeye çalışacağız.

onStart: Bu fonksiyon, sistem Sayfa yeteneğini ilk oluşturduğunda çağrılır. Bu fonksiyon çağırıldıktan sonra, Sayfa yeteneği inaktif durumuna girecektir. Bu fonksiyon, her Sayfa yeteneğinin tüm yaşam döngüsünde yalnızca bir kez tetiklenir.

Burada UI’mızı setledik. rate ve step text değişkenlerine layout karşılıklarını atadık. initViewAnnotation ve initCallback fonksiyonlarını çağırdık. ve bir MyEventHandler tanımlayıp Callback içerisinde taskleri göndermek için kullandık. En sonunda da permissionları alabilmek için bir if bloğu yazdık.

initViewAnnotation: Veriyi ekrana bind etmemizi fonksiyon. View binding de kullanabilirsiniz.

initCallback : Callback interface’ini new aracığılıyla çağırdığımız fonksiyon. Interface’i bütün üye fonksiyonlarıyla alıp onSensorDataModified fonksiyonu içinde sensörden gelen datayı değişkene atıyoruz. Burada getUiTaskDispatcher().asyncDispatch fonksiyonu ile UI thread’inde setText fonksiyonu ile veriyi ekrana basıyoruz.

onActive: Android geliştirmedeki onResume’a benzetebiliriz. heartRateSensor ve pedometerSensor değişkenlerimize ilgili sensörü atadık. Sonrasında subscribe methodlarıyla ilgili sensörün Callback’ini set ediyoruz. Bu fonksiyon lifecycle fonksiyonudur. Inaktif durumdaki Sayfa yeteneği ön plana girdiğinde çağrılır. Bu fonksiyon çalıştıktan sonra, Sayfa yeteneği, görünür ve etkileşimli hale geldiği aktif durumuna girer. Sayfa yeteneği, örneğin kullanıcı geri tuşuna dokunduğunda veya başka bir sayfa yeteneğine gittiğinde, belirli bir olaya pencere odağını kaybetmediği sürece bu durumda kalacaktır. Böyle bir olay meydana geldiğinde, Sayfa yeteneği inaktif durumuna döner ve sistem onInactive() geri çağrısını başlatır. Sayfa yeteneği yeniden aktif durumuna geçebilir ve sistem daha sonra onActive() fonksiyonunu yeniden başlatır.

subscribeBodyData: Kalp atış hızı sensörünün belirli bir örnekleme aralığında sensör verilerini alması için bir callback ayarlar.

subscribeMotionData: Hareket sensörününBelirli bir örnekleme aralığında sensör verilerini alması için bir callback ayarlar.

Sonuç

Başarıyla sensör verilerimizi okuduk. Kalp atışı anlık atış sayısını verirken, adım sayısı bu zamana kadar atılmış toplam adım sayısını gösteriyor.

Code Output

Referanslar

Thread Management Development Guidelines

Page Ability and Ability Slice Lifecycle

Sensors Overview

--

--