W końcu postanowiłem napisać coś na swój nowy telefon. A że jest to NOKIA z nowym Windows Phone 8.1 nie miałem większego wyboru. Zainstalowałem Visual Studio prosto od Microsoft-u i wziąłem się za pracę. Na szczęście zawsze podobał mi się język C# więc programowanie było dla mnie przyjemnością. Aby dobrze sprawdzić możliwości systemu postanowiłem napisać program, który korzysta z możliwie wielu elementów telefonu. Z takiego podejścia powstał program Sejsmograf ib24.
Program pozwala na analizę ruchu telefonu. Dzięki wykorzystaniu zainstalowanego w każdej Nokii akcelerometru program rejestruje każde poruszenie się telefonu i przedstawia go na wykresie. Dzięki temu przetestowałem możliwości graficzne systemu z wykorzystaniem obiektów graficznych.
Na ekranie "Prezentacja" pojawiają się wspomniane wykresy. Mogą pojawiać się w dwóch postaciach :
1. W postaci kropek przedstawiających poszczególne pojedyncze pomiary
2. W postaci linii wykresu, bardziej czytelnej dla ludzi.
Kropki rysowane są na obiekcie Canvas obiektami Ellipse(). Linie rysowane są obiektami Line().
W lewym dolnym roku pojawiają się rzeczywiste pomiary odczytane z akcelerometru. Pokazywane są przy pomocy kontrolki ListBox. Wszystkie te pomiary są zaokrąglone do 3 miejsc po przecinku. Niestety sam akcelerometr, nawet jeżeli telefon jest w bezruchu generuje dość duże wartości. Dlatego ich zaokrąglenie jest konieczne.
W prawym dolnym rogu widzimy element graficzny pokazujący wychylenie telefonu. Można nazwać, że jest to zwykła poziomica. Całość narysowana również za pomocą obiektu Ellipse() ale tym razem rysowanymi bezpośrednio w elemencie Grid. Kulka wewnętrzna zmienia swoje położenie przy każdym odczycie danych z akcelerometru. Przy bardzo dużych przeciążeniach może wychodzić poza kółka skali.
Ekran "Ustawienia" pozwala na konfigurację odczytu danych oraz wysyłkę ich do internetu na stronę ib24.biz gdzie można do odczytanych danych wrócić.
Przy pomocy komponentu Slider() ustawiamy szybkość działania akcelerometru w milisekundach. Minimalna wartość to 100ms (10 pomiarów na sekundę) maksymalna 1000ms (1 pomiar na sekundę).
Opcja "Podbij czułość" pozwala na odczytywanie bardzo drobnych ruchów. Powoduje kompresję wyników na ekranie "Prezentacja". Silne ruchy są kompresowane a minimalne ruchy są uwypuklane.
Opcja "Rysuj linie" powoduje rysowanie wykresu na ekranie "Prezentacja". Wyłączenie tej opcji powoduje rysowanie kropek przedstawiających pomiary. Z moich testów wynika, że rysowanie kropek jest znacznie wydajniejsze niż rysowanie linii. Przy dużych prędkościach odczytu rysowanie linii może powodować dość spore obciążenie telefonu, lepiej wtedy wyłączyć opcję "Rysuj linie".
I dochodzimy do opcji podłączenia do internetu. Zaraz po podłączeniu do internetu dane uzyskane z pomiarów są wysyłane na stronę ib24.biz. Zbieranych jest 100 pomiarów i taka paczka w całości jest przesyłana. Im większa szybkość pomiarów, tym więcej danych jest przesyłanych. Przy pierwszym połączeniu program rejestruje się na stronie i telefon uzyskuje numer UID i PID przy pomocy którego można zalogować się na stronie. UID i PID można odczytać na ekranie "Informacje" o czym napiszę nieco dalej.
Do wysyłki danych wykorzystuję zwykły obiekt HttpClient() a dane przesyłam za pomocą metody PostAsync() za pomocą zwykłego otwartego, nieszyfrowanego tekstu. Dla zabezpieczenia przesyłania zbyt wielu danych, jedno połączenie może przesyłać dane jedynie przez pół godziny. Aby przesłać kolejne dane należy połączyć się z serwerem ponownie.
Do programu dodałem możliwość alarmowania. Ustawienia alarmu konfiguruje się na ekranie "Alarm".
Opcja "Włącz alarm" uruchamia działanie alarmu. Przy pomocy komponentu Slider() o nazwie "Czułość alarmu" można ustawić, przy jakiej zmianie danych odczytanych z akcelerometru alarm ma się uruchomić. Czułość "Bardzo duża" powoduje uruchomienie alarmu już przy najmniejszych ruchach telefonu, dlatego włączenie alarmu powinno się robić dopiero po ustawieniu takiej czułości, gdyż nawet lekkie przyciśnięcie ekranu może wzbudzić alarm.
Opcja "Kontroluj ruch w osi" umożliwia ustawienie kierunku działania przeciążenia aby wzbudzić alarm. Można wybierać pojedyncze kierunki (X, Y, Z), połączone kierunki (XY, XZ, YZ) lub wszystkie kierunki (XYZ).
Dwie kolejne opcje dotyczą samego alarmu. Opcja "Wyświetl komunikat" powoduje wyświetlenie komunikatu o treści z pola tekstowego poniżej.
Opcja "Odtwórz dźwięk" powoduje odtworzenie dźwięku alarmu, co pozwala na nie obserwowanie ekranu podczas pomiarów i oczekiwania na alarm.
Ostatni ekran programu to ekran "Informacje". Pokazuje on informacje o jego wersji oraz to co najważniejsze: UID i PID użytkownika, przy pomocy których może się on zalogować na stronie ib24.biz, gdzie można analizować swoje pomiary.
A tak wygląda strona analizy pomiarów. Można wyświetlać tylko jeden z pomiarów lub wszystkie na raz. Zresztą, sami przetestujcie.
Niestety, programowanie w Visual Studio wciąż nie jest całkiem komfortowe. Emulator nie odzwierciedla dokładnie tego co się dzieje na telefonie. Często nie działają metody OnSuspend i OnResume. Co ciekawe, testując nawet na samym telefonie te metody nie działają. Wszystko działa prawidłowo dopiero po opublikowaniu programu w sklepie Windows. Powoduje to długotrwałość testów niektórych elementów. To samo dotyczy obiektu CurrentApp i metody RequestAppPurchaseAsync(). Przetestowanie w Visual Studio nie gwarantuje, że wszystko będzie działało poprawnie po instalacji gotowego programu ze sklepu.
Sam Visual Studio 2013 ma problem z pracą z ekranem przestawiającym wygląd aplikacji. Całość zmian musiałem programować ręcznie w samym XAML. W porównaniu do Delphi, Microsoftowi daleko jeszcze do wygody programowania. Mam nadzieję, że poprawią się w najnowszej wersji Visual Studio 2015.