ठीक है, मैंने खोज और पढ़ने का समय गुच्छा बिताया है, न केवल इस वेबसाइट पर। अधिकांश धागे जीपीएस के साथ सौदा करते हैं या इसे एक एमुलेटर में काम करने की कोशिश करते हैं। Developer.android.com पर प्रलेखन केवल एक बिंदु तक बताता है। मुझे काम करने के लिए एक साधारण चीज़ नहीं मिल सकती है। इस मुद्दे के साथ ज्यादातर लोगों की तरह, मैं बस नेटवर्क प्रदाता से अंतिम ज्ञात स्थान प्राप्त करना चाहता हूं और इसे Google मानचित्र का उपयोग करने के बाद भी नहीं मिलेगा (नेटवर्क प्रदाता का उपयोग करके क्योंकि जीपीएस बंद कर दिया गया था) और यह मुझे दिखाता है सिर्फ 1/8 से 1/4 मील दूर। ठीक है, तो "प्रदाता" (सेल टावर्स/वाई-फाई चालू होने पर) Google मानचित्र के लिए एक फिक्स प्राप्त कर रहा है। मैं अपने ऐप को आजमाता हूं और अंतिम ज्ञात स्थान नहीं प्राप्त कर सकता हूं। मैं इसे मानचित्र में दिखाने की भी कोशिश नहीं कर रहा हूं, मुझे स्थान प्राप्त करने के लिए बटन दबाए जाने के बाद स्क्रीन पर लेट और लंबे निर्देशांक प्रिंट कर रहे हैं। दस्तावेज एक ही गतिविधि से बने अंतिम स्थान के बारे में कुछ भी नहीं कहता है। यह कहता है कि यह निर्दिष्ट प्रदाता से अंतिम ज्ञात स्थान वापस कर देगा। मैं नेटवर्क्स_PROVIDER निर्दिष्ट कर रहा हूं जो दस्तावेज कहता है सेल टावर और वाई-फाई है। (और हाँ, मेरे पास मैनिफेस्ट में शामिल है।)फोन पर नेटवर्क्स_PROVIDER से getLastKnownLocation शून्य
क्या कोई जानता है कि यह कैसे काम करता है? मुझे अभी तक Google साइट पर भी एक अच्छी व्याख्या दिखाई नहीं देनी है। यदि आप नहीं बता सकते हैं, तो मैं निराश हूं। यह स्पष्ट रूप से कुछ है जो मैं कर रहा हूं (या नहीं), इसलिए मैं कुछ भी/किसी को दोषी नहीं ठहरा रहा हूं, लेकिन खुद को, दस्तावेजों को छोड़कर जो मेरी आवश्यकताओं के लिए बहुत कम हो जाता है।
अद्यतन: अब मैं एक स्थान श्रोता का उपयोग कर रहा हूं और एक स्थान प्राप्त कर रहा हूं, मैं अंतिम स्थान मानता हूं। ऐसा लगता है कि किसी स्थान श्रोता के माध्यम से स्थान अपडेट शुरू किए बिना अंतिम स्थान प्राप्त करने में सक्षम होने के लिए तार्किक लगता है, लेकिन मैं नहीं था, और अब मैं एक स्थान श्रोता के साथ हूं।
अब मेरी समस्या यह है कि मुझे स्थान बदलने के लिए स्थान नहीं मिल रहा है। मेरा कोड अभी भी कुछ भी नहीं करता है सिवाय इसके कि श्रोता के माध्यम से स्थान अपडेट प्राप्त करने का प्रयास करें, और अंतिम ज्ञात स्थान को छीनने के लिए बटन दबाएं। Google मानचित्र मुझे दिखाएगा कि मैं कहां हूं, लेकिन मुझे अपने कोड में 20 मील दूर स्थान मिल रहा है। मुझे एक एहसास है कि मुझे एक नया स्थान मिल रहा है, लेकिन मुझे अंतिम/स्थैतिक घोषणाओं का दोषपूर्ण उपयोग हो सकता है जो मुझे उस स्थान को संग्रहीत करने और उस स्थान का उपयोग करने से रोक रहा है जब मुझे इसकी आवश्यकता हो। मेरे मैनिफेस्ट में इंटरनेट और fine_location अनुमतियां हैं, और गतिविधि के लिए xml ठीक काम करता है - यह केवल स्थान के लिए लाइव खोज चालू/बंद करने के लिए एक बटन प्रदान करता है, मैन्युअल रूप से अंतिम अज्ञात स्थानापन्न करने के लिए एक बटन, और अक्षांश और देशांतर प्रदर्शित करने के लिए एक टेक्स्टव्यू। मैंने इसे बहुत लंबे समय से रखने के लिए गैर-अनिवार्यताओं को बाहर करने की कोशिश की है।
public class RMain extends Activity {
public boolean islivesearchon;
public static double netlistentime = 0 * 60 * 1000; // minutes * 60 sec/min * 1000 for milliseconds
public static double netlistendistance = 0 * 1609.344; // miles * conversion to meters
public static double gpslistentime = 30 * 60 * 1000; // minutes * 60 sec/min * 1000 for milliseconds
public static double gpslistendistance = 0 * 1609.344; // miles * conversion to meters
private static Location currentlocation;
private LocationManager locationManager;
private LocationListener locationListener;
public static Criteria criteria;
public TextView latview;
public TextView longview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rmain);
latview = (TextView) findViewById(R.id.display_latitude);
longview = (TextView) findViewById(R.id.display_longitude);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// setup bestProvider
criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String bestprovider = locationManager.getBestProvider(criteria, true);
// get an initial current location
currentlocation = locationManager.getLastKnownLocation(bestprovider);
latview.setText(Double.toString(currentlocation.getLatitude()));
longview.setText(Double.toString(currentlocation.getLongitude()));
// Define locationListener interface
locationListener = new LocListener();
// React to LiveSearch toggle button press
final Button livesearch = (Button) findViewById(R.id.button_livesearch);
livesearch.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
TextView livesearchview = (TextView) findViewById(R.id.button_livesearch);
boolean isNetEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(islivesearchon) {
locationManager.removeUpdates(locationListener);
islivesearchon = false;
livesearchview.setText("Live Search is OFF");
}
else {
// ideally should check for !isProviderEnabled first, then provide option for turning it on
if(isNetEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, (long) netlistentime, (float) netlistendistance, locationListener);
islivesearchon = true;
livesearchview.setText("Live Search is ON");
}
// ideally should check for !isProviderEnabled first, then provide option for turning it on
if(isGpsEnabled) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, (long) gpslistentime, (float) gpslistendistance, locationListener);
islivesearchon = true;
livesearchview.setText("Live Search is ON");
}
}
}
});
// Respond to Get Location button click to get last known location
final Button getlocation = (Button) findViewById(R.id.button_getlocation);
getlocation.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String bestprovider = locationManager.getBestProvider(criteria, true);
Location lastlocation = locationManager.getLastKnownLocation(bestprovider);
latview.setText(Double.toString(lastlocation.getLatitude()));
longview.setText(Double.toString(lastlocation.getLongitude()));
}
});
}
private class LocListener implements LocationListener {
@Override
public void onLocationChanged(Location latestlocation) {
// Called when a new location is found by the network location provider.
currentlocation.set(latestlocation);
latview.setText(Double.toString(currentlocation.getLatitude()));
longview.setText(Double.toString(currentlocation.getLongitude()));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
};
}
क्या आप अपने फोन के अंदर सिम करते हैं? –
बस एप्लिकेशन को शुरू करने के समय बस किसी भी स्थान को सेट करें, फिर getLastKnownLocation पुनर्प्राप्त करें ... –
धन्यवाद दोस्तों। हां, मैं केवल अपने फोन के अंदर सिम - एक्लिप्स में एमुलेटर हमेशा मेरे लिए ठीक से नहीं चलता है। – crispy