Kolejna porcja screenshot’ów z “pracy inżynierskiej”

Jak widać doszła obsługa menu, a w niej:
- My location – automatycznie centruje mapę na naszej pozycji
- Start scan(/Stop scan) – “włącza/wyłącza” wątek skanujący
- List AP – wyświetla listę wszystkich Access Point’ów które w czasie działania aplikacji znajdowały się w zasięgu
- Setting – wyświetla ustawienia aplikacji (ta pozycja wymaga jeszcze implementacji)
Trzy z czterech dostępnych akcji są oprogramowane, zostało mi jeszcze stworzyć odpowiednie menu z ustawieniami aplikacji.

Tak wygląda lista wszystkich “odkrytych” Access Point’ów, z lewej strony widać grafikę/piktogram opisujący jakość sygnału danej sieci (w założeniach jest też, żeby ten sam obrazek opisywał poziom zabezpieczeń danej sieci). Obok jest czytelna nazwa punktu dostępowego (czyli SSID). Punkty dostępowe rozróżniane są po BSSID czyli adresie fizycznym urządzenia, więc w szczególnych przypadkach na liście mogą pojawić się kilka pozycji o tej samej nazwie. W każdy element na liście można “kliknąć” i uzyskać widok szczegółowy.
Muszę się dowiedzieć o status licencyjny grafik dołączonych do Androida …

Ostatni screenshot, pokazuje wspomniany już “widok szczegółowy”. Mamy tutaj szczegółowe dane odnośnie wybranego punktu dostępowego. Jak można zauważyć widok ten wymaga jeszcze dopracowania, gdyż nie wszystkie dane są w pełni widoczne.
To na tyle, więcej za jakiś czas
Oto pierwszy screenshot z mojej pracy inżynierskiej

Aplikacja posiada już następujące funkcjonalności:
- Potrafi sprawdzić stan WiFi oraz w razie potrzeby sama go włączyć (nie pytając użytkownika o zdanie … bo po co ? jeżeli się uruchamia taką aplikację wiadomo, że sieć bezprzewodowa musi być włączona
)
- Potrafi sprawdzić status usługi GPS oraz poprosić użytkownika o jej włączenie (ponieważ android może za zgodą użytkownika wysyłać dane lokalizacyjne go Google’a warto żeby użytkownik sam włączył usługę, ewentualnie wyłączył moją aplikację)
- Wyświetla aktualną pozycję użytkownika (to jest właśnie ta gwiazdka na środku ekranu)
- Automatycznie co pół sekundy skanuje eter w poszukiwaniu sieci bezprzewodowych.
- W prawym górnym rogu umieszczona jest licznik aktualnie wykrytych sieci
- W prawym dolnym rogu umieszczony jest licznik sieci które aplikacja “mniej więcej” zlokalizowała (ew. potrafiła zlokalizować)
Przewidywane funkcjonalności:
- Automatyczne wycentrowanie mapy na pozycję użytkownika (gwiazdkę)
- Dodanie możliwości konfiguracji (chociażby możliwość zmiany interwału skanowania)
- Obsługa przycisku “menu”
- Zapisywanie wyników aplikacji w “jakimś” formacie
- Kalibracja aplikacji
- Algorytm lokalizacji punktów na podstawie sygnału WiFi oraz lokalizacji użytkownika
Teoretycznie powinno już być z górki, gdyż już w miarę zaprzyjaźniłem się z SDK oraz API android’a. Największym wyzwaniem będzie główna część czyli implementacja (raz opracowanie) algorytmu pozwalającego na zlokalizowanie access point’a; jego zarysy już kłębią się mi w głowie z tym, że posiada on jeszcze kilka słabostek.
Zmiana platformy implementacyjnej znacząco przyśpieszyła prace nad aplikacją
Dziś w ciągu nie całych 2 godzin udało się mi wystartować cały projekt oraz uruchomić usługę Google Maps, GPS oraz zintegrować całość ze sobą. Jedyną rzeczą jaką (na razie) moja aplikacja wykonuje, jest umieszczenie markera (w postaci maskotki androida – robota) na odpowiedniej szerokości i długości geograficznej oraz przesunięcie w to miejsce mapy. Czyli aktualnie geo-lokuje telefon ;>
Całość wymaga jeszcze dopracowania, gdyż jest to tylko szybki szkic … ale posiada bardzo ważna cecha, DZIAŁA
. Przede mną jeszcze sporo pracy:
- Ustalenie odpowiednich interface’ów
- Zaprojektowanie architektury aplikacji
- Obsługa wyjątków (reakcja na włączenie/wyłączenie GPS’u, WiFi itp.)
- Obsługa WiFi
- Reprezentacja zebranych danych na mapie
- Zapis całości w formie pliku wynikowego czy tez map w Google Maps
Na chwilę obecną tylko tyle przychodzi mi do głowy, pewnie jeszcze sporo rzeczy wyjdzie w “praniu”.
Do mojego zbioru przydatnych linków doszły dwa nowe elementy, głównie dzięki nim udało się mi tak szybko przebrnąć przez tą część
Siedem semestrów nauki już za mną, czas więc na napisanie pracy inżynierskiej … a czasu zostało nie wiele, bo do końca kwietnia. Tak więc czeka mnie teraz wzmożony okres ;>. Moje ambitne plany zakładają do końca lutego stworzyć aplikację na tyle, żeby można było rozpocząć badania (oczywiście w między czasie aplikacja będzie musiała być ulepszana). Cały marzec mam zamiar poświęcić na przeprowadzenie “badań naukowych” oraz “napisanie” pracy.
Jeżeli wszystko pójdzie zgodnie z ambitnym planem to w połowie kwietnia powinienem złożyć gotową pracę … zobaczymy jak to wyjdzie.
W pierwotnej wersji moja praca inżynierska miała wiązać się z OpenMoko … niestety semestr walki z JNA nie przyniósł pożądanych efektów dlatego postanowiłem zmienić platformę na “bardziej dojrzałą” (zwłaszcza, że w między czasie nabyłem G1).
Taki obrót sytuacji spowodował, że na chwilę obecną nie posiadam nawet zarysu aplikacji ;>. Ale czym tu się przejmować, nie ma co biadolić czas zabierać się za robotę
IMHO bardzo dobrym quick-start’em jest ta dwugodzinna prezentacja. Zawiera ona dość przekrojową wiedzę potrzebną do tego żeby szybko wystartować z projektem; brakuje w niej opisu manifestu aplikacji, poziomów dostępu do danych i sprzętu … to będzie trzeba uzupełnić na własną rękę.
Oprócz tego standardową kopalnią wiedzy na temat androida jest strona developer.android.com, gdzie dostępne są prezentacje z Google I/O oraz inne sponsorowane przez Google jak również dostępna jest pełna dokumentacja.
W tym poście postaram się agregować wszystkie przydatne linki które okażą się pomocne podczas tworzenia aplikacji. Więc jeżeli interesujesz się tym tematem to zapraszam do zaglądania tutaj … podobnie jeżeli Ty posiadasz jakieś interesujące materiały nie krępuj się umieścić link do nich w komentarzu
- Tutorial pokazujący wykorzystanie widgetu MapView dostępnego w Google APIs (czyli dodatku do standardowego API androida)
- Szybki TUT jak rozpocząć “zabawy” z GPS’em
Ostatni update Android’a na OpenMoko dostępny jest w katalogu Sean McNeil‘a na people.openmoko.org … niestety uImage (kernel) ma ponad 2mb i nie można go bez problemowo wrzucić na FreeRunner’a gdyż domyślnie uboot odczytuje maksymalnie 2mb jądra (co powoduje błąd sumy CRC) … ale przecież to jest OpenMoko, więc:
- boot’ujemy Neo do NOR’a lub NAND’a (tj. przytrzymujemy przyciski AUX i POWER, kolejność wciśnięcia jest ważna gdyż od niej zależy to do jakiego rodzaju pamięci się zabootujemy; więcej na wiki OpenMoko)
- podpinamy Moko przez usb do komputera
- odpalamy komendę:
screen /dev/tty.usbmodem0000001
(nazwa urządzenia wzięta jest z MacOs X’a; na którym obecnie (sic!) pracuję
)
- to powinno nas podłączyć do shell’a, następnie wklepujemy tą komende:
setenv bootcmd setenv bootargs \${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel 0x300000\; bootm 0x32000000
modyfikuje ona tablicę zmiennych ENV, dokładniej wpis dla bootcmd w taki sposób, że pozwala na odczytanie do 3mb danych dla kernela
- teraz wystarczy:
saveenv
i już możemy się cieszyć z możliwości zabotowania jądra większego niż 2mb ;>
Modyfikacja zmiennych uboot’a może “zabić” Twoje Neo, więc radzę robić to z rozwagą; jeżeli nie wiesz co robisz to po prostu tego nie rób !
Opis rozwiązania problemu znalazłem w tym wątku.
Miłej i rozważnej zabawy ;>
Tak już jest, świeżutki obraz Androida z software’owa klawiatura, do pobrania i flash’owania ;>
Przyznaje, że działa … można nawet odebrać połączenie ;> już nie można bo z niewiadomych przyczyn moko nie wpina się do sieci GSM. Nie działa również Bluetooth bo nie można włączyć urządzenia; do tego klawiatura jest strasznie wolna i bez stylusa się nie obejdzie … cóż i tak dobrze jest widoczny postęp
Już od dłuższego czasu dostępny jest Google Android na FreeRunner’rze. Instalacja niestety nie jest taka prosta. Po pierwsze trzeba znaleźć obraz rootfs’a … co w cale nie jest takie proste (spędziłem nad tym troche czasu ;>)
… ale nie po to pisze o tym żeby inni się męczyli tak więc … z sąd http://t0ny.net/openmoko/images/android/ zaciągamy uImage i rootfs. W między czasie trzeba przygotować kartę SD … tak, tak, android wymaga karty SD i to po partycjonowanej w specjalny sposób … kartę dzielimy na 2 partycje, pierwsza vfat lub ext2 do zapisu muzyki/filmów itp (ponoć maksymalny jej rozmiar to 256MB, ja nie próbowałem robić większej), druga partycja to koniecznie ext3, na niej android zapisuje swoje ustawienia; dodatkowo potrzebna jest karta SIM z wyłączonym kodem PIN. Może być również potrzebny nowszy u-boot (ja użyłem tego z OM2008.9). Po udanym flash’owaniu trzeba się uzbroić w cierpliwość gdyż system startuje dość długo.
Czego możemy się spodziewać ? Nie działającego suspend’u (od razu trzeba wyłączyć wyłączanie ekranu, gdyż po tej czynności android wchodzi w stan uśpienia), nie działającego WiFi, GPS’u i Bluethooth’a (działa ale nie można wpisać klucza z powodu braku klawiatury), cichego dźwięku podczas rozmowy (dodatkowo nie znalazłem nigdzie ustawień mogących to poprawić … może za mało szukałem
). Ogólnie system w miarę działa … brak jest tylko klawiatury ekranowej, ale można takowoą doinstalować … oczywiście jak uda się nam w jakiś sposób połączyć z internetem
.
Powodzenia i miłej zabawy
PS. dla bardziej dociekliwych polecam: http://onlinedev.blogspot.com/search/label/android
Najpierw (chyba) było Google Web Toolkit, czyli kompilator Java’y do javascript, potem projekt Android, czyli system operacyjny w Java’ie dla telefonów komórkowych (bazujący na Linux’ie), a teraz App Engine (czyli google’owy system hostingu) ma również wspierać język Sun’a … ciekawe gdzie jeszcze Google wepchnie jvm