Android GPS adatok elérése

Android GPS adatok elérése
2010-05-21T20:30:55+02:00
2011-02-22T19:29:30+01:00
2022-11-20T21:50:57+01:00
LacasracX
Hello!


import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import android.widget.Toast; public class blabla extends Activity { private LocationManager lm; private LocationListener locationListener; private static Context mycontext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lm = (LocationManager)this.getSystemService(LOCATION_SERVICE); locationListener = new LocationListener() { public void onLocationChanged(Location location) { Log.i("LocationListener", "Logging Change"); hint("x"); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub hint("y"); } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub hint("a"); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub hint("b"); } }; lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 1, locationListener); } public static void hint(CharSequence s) { Toast toast=Toast.makeText(mycontext, s, Toast.LENGTH_SHORT); toast.show(); }

és..

<uses-permission android:name="android.permission.ACCESS_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

Miért nem csinál semmit? Ötletek? Próbáltam már 6 féle kódot, de egyik se ad vissza semmit.:(
Mutasd a teljes hozzászólást!
ötlet? nálad semennyit nem vár? rögtön update-el?


Dehogynem vár, addig vár, amíg a GPS lock sikeres nem lesz, addig a GPS nem szolgáltat adatokat, nincs mit frissíteni se, hiszen nem tudja, hogy hol vagy.

Ha előbb kell közelítő adat, akkor kell kérned hálózati adatokat is, ehhez kell a ACCESS_COARSE_LOCATION, illetve a meglévő GPS_PROVIDER mellé kell a NETWORK_PROVIDER:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationUpdateHandler());

Ekkor a cellainformációk alapján ad 1-2 másodperc múlva pozíciót, aztán ha a GPS lock is megvan, akkor pontosítja a pozíciót.
--
JavaForum.hu - Android
Mutasd a teljes hozzászólást!

  • Kissé zavaros a program, kell egy LocationListener implementáció, ami kb. ennyi:
    public class LocationUpdateHandler implements LocationListener { @Override public void onLocationChanged(Location loc) { int lat = (int) (loc.getLatitude() * 1E6); int lng = (int) (loc.getLongitude() * 1E6); // ... } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }

    Aztán kell hozz még két sor az onCreate metódusba:
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationUpdateHandler());

    Kell ACCESS_FINE_LOCATION jog, és kész is vagy.
    --
    JavaForum.hu - Android
    Mutasd a teljes hozzászólást!



  • import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.Toast; public class GPSTest extends Activity { public static Context mycontext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mycontext=this; LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationUpdateHandler()); } public static void hint(CharSequence s) { Toast toast=Toast.makeText(mycontext, s, Toast.LENGTH_SHORT); toast.show(); } public class LocationUpdateHandler implements LocationListener { @Override public void onLocationChanged(Location loc) { int lat = (int) (loc.getLatitude() * 1E6); int lng = (int) (loc.getLongitude() * 1E6); // ... hint("GPS adatok: "+lat+" "+lng); } @Override public void onProviderDisabled(String provider) { hint("GPS is disabled"); } @Override public void onProviderEnabled(String provider) { hint("GPS Enabled"); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { hint("GPS Status changed"); } } }

    OK, ez a 7. kód, ez sem működik. Ki-be kapcsolom a GPS-t akkor azt kiírja, de a lng-ltd-t nem.
    Mutasd a teljes hozzászólást!
  • Copy-paste, deploy és tökéletesen működik Spica-n. Milyen eszközzel próbálod?
    --
    JavaForum.hu - Android
    Mutasd a teljes hozzászólást!
  • HTC Legend

    ha DDMS-t használok és telnettel írok be koordinátákat akkor jó (emulatoron), viszont ha beírom ezt:

    geo fix -73.03533 31.88945

    akkor megmutatja a hintet elsőre

    ha még egyszer beírom akkor már nem.


    amúgy natúr ha feltöltöm nem mutat koordinátákat, pedig

    settings/local be van pipálva

    allow mock location is be van..
    Mutasd a teljes hozzászólást!
  • eddig nem ment, elindítottam egy másik GPS alkalmazást, és onnantól jó...miért?:)
    Mutasd a teljes hozzászólást!


  • kiszámoltam, kb 40 mperc kell mire mutat vmit a cucc, ezt nem lehet felgyorsítani? miért ilyen lassú?

    elvileg: getLastKnownLocation lehetne hazsnálni, de az meg null-t ad vissza, vagy crashel.

    ötlet? nálad semennyit nem vár? rögtön update-el?
    Mutasd a teljes hozzászólást!
  • ötlet? nálad semennyit nem vár? rögtön update-el?


    Dehogynem vár, addig vár, amíg a GPS lock sikeres nem lesz, addig a GPS nem szolgáltat adatokat, nincs mit frissíteni se, hiszen nem tudja, hogy hol vagy.

    Ha előbb kell közelítő adat, akkor kell kérned hálózati adatokat is, ehhez kell a ACCESS_COARSE_LOCATION, illetve a meglévő GPS_PROVIDER mellé kell a NETWORK_PROVIDER:
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationUpdateHandler());

    Ekkor a cellainformációk alapján ad 1-2 másodperc múlva pozíciót, aztán ha a GPS lock is megvan, akkor pontosítja a pozíciót.
    --
    JavaForum.hu - Android
    Mutasd a teljes hozzászólást!
  • Kösz, amúgy jók a cikkek, magyar leírást még nem is igazán találtam az androidról. Így tovább! (Azt hiszem a listview elég hasznos volt a számomra az oldalon)

    Mutasd a teljes hozzászólást!


  • Tehát, ha jól értem, elég lenne ez is:

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

    egy gombra kattintva mindig akkor megadná a jelenlegi poziciót egyszer.

    mit jelent az hogy "közelítő adat"?
    Mutasd a teljes hozzászólást!
  • A network provider is percenként szolgáltat közelítő pontossággal pozíció adatokat, de nem ad másodpercenként többször méteres pontosságot, mint a GPS, hanem a cella azonosító (és a cella központ pozíciója és a cella hatókörzete) alapján egy adatbázisból kinyeri, hogy hol vagy, a pontossága lehet akár 100 méter, akár 5-10km is, le tudod kérdezni a getAccuracy() metódussal, ami méterben adja vissza a pozíció pontosságát.

    A requestLocationUpdate bind-et nem érdemes gombnyomásra hozzáadni, mivel unbind is kell, különben az Activity-t a háttérbe téve továbbra is működik, továbbra is rajzol Toast-ot akár a Home képernyőre is... szóval az onPause során illik a különféle manager példányokból levenni a listener-eket... :)
    --
    JavaForum.hu - Android
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Tegnap óta próbálgatom sorra a különféle kódokat és egyszerűen nem jutok 1ről a kettőre ebben a GPS témában....


    Egy olyan egyszerű dolgot szeretnék megvalósítani, hogy egy textViewbe kiírjam pl. a földrajzi szélességét a tartózkodási helyemnek...

    Amire rájöttem, hogy akármilyen megvalósítási módot választok, az emulátor és a teló (Xperia x10 - Android 2.1) is hibát ír... Szóval le sem fut.

    A sor pedig a következő:


    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationUpdateHandler());

    Mivel nem lehetetlent szeretnék megoldani, így gondolom valami apróságot nem vettem figyelembe

    Legutóbb az itt látható forrást másoltam be - melyre most éppen válaszolok -és nekem azzal sem működik...

    auth.gabor írta, hogy
    "
    Kell ACCESS_FINE_LOCATION jog, és kész is vagy.
    "

    Ez mi pontosan?

    Én csak simán létrehoztam egy új Android alkalamzást nem állítgattam semmi extrát..
    Ha a kódon kívül még valami extra kell, akkor azt megköszönném, ha valaki leírná....


    Nem hiszem el, hogy ez annyira bonyi lenne

    Ha kiszedem a kódból az általam írt sort, akkor a progi lefut (csak ugye nem ír ki semmit - esetleg az alapértékeit a TextViewjeimnek...)

    Általában nem szoktam feladni és googlezok éjjel nappal, de ez az apróság nagyon kifog rajtam

    Amit eddig Német, Angol és Magyar nyelven találtam mindent kipróbáltam, de semmi eredmény

    S, mivel az emulátor is meghal, gondolom nem a telóm a hibás

    Köszi
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd