wtorek, sierpnia 31, 2010

Czy ustalanie pozycji w Androidzie może kosztować?

Spać mi się chce, więc krótko będzie.

Z rozmów i dyskusji na Blipie wnoszę, że istnieją poważne rozbieżności co do tego czy w Androidzie ustalenie pozycji może kosztować.

Ja twierdzę, że może kosztować gdy location providerem będzie "network", a my będziemy podpięci do Internetu przez sieć komórkową.
W momencie gdy będziemy podpięci przez WiFi dostawca "network" może, a nawet powinien być bezpłatny.

Dlatego na szybko napisałem program, który to ma testować.

Oto kod jego najważniejszej aktywności:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
List<String> list = lm.getAllProviders();
StringBuilder sb = new StringBuilder();
for (String str:list) {
LocationProvider lp = lm.getProvider(str);
if (lp!=null) {
sb.append(str).append(" ").append(lp.hasMonetaryCost()).append("\n");
}
}
TextView tv = (TextView)findViewById(R.id.toster);
tv.setText(sb);
}

Sam program potrzebuje jeszcze tego by na głównym ekranie był element TextView o id "toster", oraz by w AndroidManifest.xml były odpowiednie permissiony (to przez to, że używamy lokalizacji, stąd potrzebne są pozwolenia ACCESS_FINE_LOCATION i ACCESS_COARSE_LOCATION.
Tu są źródła jakby kogoś to interesowało.

A tutaj sam plik APK (http://www.przemelek.pl/file/GPSTest.apk), który można zainstalować na telefonie.
Tutaj QRCode:



Teraz prośba :-)
Jak masz telefon z Androidem to zainstaluj ten program i podeślij mi informację o wyniku jego działania, wraz z informacją czy w momencie uruchomienia programu Twój telefon był zalogowany do sieci WiFi czy tylko do sieci komórkowej (i ważne czy miał skonfigurowanego APNa).

Program działa w taki sposób, że wypisuje wszystkie nazwy dostępnych location providerów, a obok nich to czy mogą być płatne czy nie. U mnie na G1 z Android 1.6 gdy jestem podłączony do Internetu przez sieć komórkową mam taki wynik:
network true
gps false

Co oznacza, że ustalenie pozycji przy pomocy sieci może kosztować, a przy pomocy GPS nie będzie nigdy kosztować.

Z góry dziękuję za wszelkie dane :-) [tu, na Google Buzz, na maila, whatever]


Podobne postybeta
AppInventor - pierwsze wrażenia i pierwsze programy :-)
Android, lokalizacja i koszty
Nie tylko IE6 powinno pójść do piachu, każdy Internet Explorer powinien!!!!
Zinwigiluj się sam ;-)
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)

2 komentarze:

  1. network true
    passive false
    gps false

    Taki wynik mam nawet jak mam wyłączone WiFi I o dznaczone łączenie się z siecią mobilną (data enabled: no)

    PS: po co twoja aplikacja chce mieć dostęp do odczytu/zapisu danych na karcie SD? Strach instalować...

    OdpowiedzUsuń
  2. To chyba standard dla aplikacji instalowanych spoza marketu, gdyby tą aplikacje instalować przez Market to prosiłaby tylko o zgodę na użycie tych permissionów z lokalizacją związanych.

    OdpowiedzUsuń