2013-05-11 9 views
28

चीयर्स, मैं एंड्रॉइड के माध्यम से वर्तमान जीपीएस-स्थान प्राप्त करने की कोशिश कर रहा हूं। मैंने this Tutorial और Vogellas article का पालन किया। हालांकि यह काम नहीं कर रहा है। LocationManager.NETWORK_PROVIDER का उपयोग करते समय मुझे हमेशा 51 का अक्षांश और 9 का अक्षांश प्राप्त होता है - इससे कोई फर्क नहीं पड़ता कि मैं कहां खड़ा हूं। LocationManager.GPS_PROVIDER का उपयोग करते समय, मुझे कुछ भी नहीं मिल रहा है।एंड्रॉइड जीपीएस स्थान कैसे प्राप्त करें

हालांकि जीएमएपीएस का उपयोग करते समय सबकुछ काम करता है: एस कोई विचार क्यों नहीं। जीमैप्स जैसे वर्तमान जीपीएस स्थान को मैं कैसे प्राप्त कर सकता हूं?

यहाँ मेरी कोड है:,

int latitude = (int) (location.getLatitude()); 
int longitude = (int) (location.getLongitude()); 

अक्षांश और देशांतर double -values ​​हैं क्योंकि वे प्रतिनिधित्व करते हैं:

public LatLng getLocation() 
    { 
    // Get the location manager 
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String bestProvider = locationManager.getBestProvider(criteria, false); 
    Location location = locationManager.getLastKnownLocation(bestProvider); 
    Double lat,lon; 
    try { 
     lat = location.getLatitude(); 
     lon = location.getLongitude(); 
     return new LatLng(lat, lon); 
    } 
    catch (NullPointerException e){ 
     e.printStackTrace(); 
     return null; 
    } 
    } 
+2

एक उच्च स्तरीय और आसान तरीका के लिए, आप इस पुस्तकालय का उपयोग कर सकते/एंड्रॉइड-सरल स्थान – caw

+0

http: // stackoverflow जांचें।कॉम/प्रश्न/1513485/कैसे-करें-i-get-the-current-gps-location-programmatically-in-android/38897436 # 38897436 –

उत्तर

25

यहाँ अपने समस्या है:

package com.example.gpslocation; 

import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Context; 
import android.util.Log; 
import android.view.Menu; 

public class GPS_Location extends Activity implements LocationListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_gps__location); 

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.gps__location, menu); 
    return true; 
} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

    int latitude = (int) (location.getLatitude()); 
    int longitude = (int) (location.getLongitude()); 

    Log.i("Geo_Location", "Latitude: " + latitude + ", Longitude: " + longitude); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

} 
+1

पहले से ही सोचा था कि यह कुछ गूंगा होगा। आपने इसे साबित कर दिया है; पी टा – JustBasti

+0

@ जस्टबास्ती आपको इसे उत्तर के रूप में चिह्नित करना चाहिए। –

+0

ये अभी भूल गया: पी thx – JustBasti

20

इसे आज़मा कर देखें डिग्री में स्थान।

उन्हें int पर कास्ट करके, आप अल्पविराम के पीछे सब कुछ छोड़ रहे हैं, जो एक बड़ा अंतर बनाता है। देखें "Decimal Degrees - Wiki"

+4

उत्तर के लिए धन्यवाद, हालांकि मैंने पहले से ही आपके कोड को आजमाया है और बस अपना कोड घटाया है आपको समस्या दिखाने के लिए सबसे सरल समाधान के लिए; पी धन्यवाद वैसे भी – JustBasti

12

इस कोड को एक समस्या है:

int latitude = (int) (location.getLatitude()); 
int longitude = (int) (location.getLongitude()); 

आप बदल सकते हैं intdouble

double latitude = location.getLatitude(); 
double longitude = location.getLongitude(); 
6

के लिए प्रारंभिक मुद्दा lat और lon बदलते दोगुना करने के द्वारा हल किया गया है।

मैं Location location = locationManager.getLastKnownLocation(bestProvider); के साथ समाधान में टिप्पणी जोड़ना चाहता हूं, यह आखिरी ज्ञात स्थान खोजने के लिए काम करता है जब अन्य ऐप इसके लिए lisnerning था। यदि, उदाहरण के लिए, उपकरण शुरू होने के बाद से कोई ऐप नहीं करता है, तो कोड शून्य लौटाएगा (हाल ही में इसे समझने के लिए कुछ समय बिताया)।

इसके अलावा, यह एक अच्छा manifest में सुन जब locationManager.removeUpdates(this);

इसके अलावा द्वारा उस के लिए कोई जरूरत नहीं है को रोकने के लिए, यहां तक ​​कि अनुमतियों के साथ अभ्यास कोड काम करता है जब स्थानीय सेवा का एक डिवाइस पर Android सेटिंग में सक्षम होता है,।

0

अंश: -

try 
     { 
      cnt++;scnt++;now=System.currentTimeMillis();r=rand.nextInt(6);r++; 
      loc=lm.getLastKnownLocation(best); 
      if(loc!=null){lat=loc.getLatitude();lng=loc.getLongitude();} 

      Thread.sleep(100); 
      handler.sendMessage(handler.obtainMessage()); 
     } 
     catch (InterruptedException e) 
     { 
      Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show(); 
     } 

आप ऊपर देख सकते हैं, एक धागा उपयोगकर्ता इंटरफ़ेस गतिविधि का मुख्य धागा जो लगातार GPS अक्षांश को प्रदर्शित करता है, लंबे समय से वर्तमान समय और एक यादृच्छिक पासा फेंक साथ साथ चल रहा है।

यदि आप उत्सुक तो बस पूर्ण कोड की जांच कर रहे हैं: https://github.com/delight-im: जीपीएस स्थान प्राप्त करने के लिए GPS Location with a randomized dice throw & current time in separate thread

संबंधित मुद्दे