दिलचस्प पोस्ट
मैं जावा में दो सूचियों में कैसे शामिल हूं? फ्रेगमेंट # सेट रीटेन इंजिन (बूलीयन) का उपयोग क्यों करें? यह निर्धारित करने के लिए कि एंड्रॉइड पर कौन से बटन दबाया गया है एसोसिएटेटिव सरणी बनाम वस्तु जावास्क्रिप्ट में सेट होमपेज कार्यक्षमता के लिए सार्वभौमिक जावास्क्रिप्ट फ़ंक्शन ओवरलोडिंग और यूडीएफ एक्सेल VBA में रनटाइम पर वेब। कॉन्फिग ऐप सेटिंग्स को कैसे संशोधित करें? एक ठोस वर्ग और एक अमूर्त वर्ग के बीच अंतर क्या है? मैं जी.आई.एस.पी.ओ. आउटपुटस्ट्रीम का इस्तेमाल करते हुए एक स्ट्रिंग ज़िप और अनझिप कैसे कर सकता हूं जो .Net के साथ संगत है? आप Node.js में डाक डेटा कैसे निकाल सकते हैं? knockoutjs के साथ jquery ui संवाद एकीकृत एक MySQL इकाई-विशेषता-मान स्कीमा को कैसे धुएं स्केल में == और .equals के बीच अंतर क्या है? क्यों तरीकों का संदर्भ समानता नहीं है? ईमेल में PHP नई लाइन ब्रेक

एंड्रॉइड: Google Play सेवा बनाम स्थान प्रबंधक

मैं उस ऐप का निर्माण करना चाहता हूं जो उपयोगकर्ता के वर्तमान स्थान को लेकर आसपास के केंद्रों का ध्यान रखता है और फिर रुचि के अंक (जैसे सलाखों, रेस्तरां, आदि) को ढूंढता है जो Google Places एपीआई के माध्यम से उनके पास हैं।

शुरू करने के लिए एक जगह के लिए वेब पर खोज करने के बाद, मैं कुछ ट्यूटोरियल जो कि LocationManager के LocationManager का पता लगाने के लिए Google Play Services का उपयोग करने वाले LocationManager मैनेजर वर्ग और कुछ अन्य का उपयोग करते हैं।

पहली नजर में उन दोनों को एक ही काम करना है, लेकिन जब से मैं इस पर नया हूँ, मुझे थोड़ा भ्रमित हुआ और मुझे नहीं पता कि मेरी ज़रूरतों के अनुसार सबसे अच्छा कौन सा तरीका है। तो, मैं आप से पूछना चाहता हूं:

स्थानों को खोजने के इन दो तरीकों के बीच अंतर क्या हैं (यदि कोई है)?

Solutions Collecting From Web of "एंड्रॉइड: Google Play सेवा बनाम स्थान प्रबंधक"

Android पर उपयोगकर्ता स्थान

एंड्रॉइड पर यूज़र का स्थान प्राप्त करना आईओएस की तुलना में थोड़ा कम सीधा है भ्रम को शुरू करने के लिए, आप इसे पूरी तरह से दो तरीके से कर सकते हैं। सबसे पहले एंड्रॉइड के लिए एंड्रॉइड एलायंस का उपयोग कर रहा है। स्थान। com.google.android.gms.location.LocationListener , और दूसरा गूगल प्ले सर्विसेज एपीआई का प्रयोग कर रहा है com.google.android.gms.location.LocationListener चलो उन दोनों के माध्यम से चलते हैं

  1. Android का स्थान API

    एंड्रॉइड के स्थान एपीआई स्थान पाने के लिए तीन अलग-अलग प्रदाताओं का इस्तेमाल करते हैं –

    • LocationManager.GPS_PROVIDER – यह प्रदाता उपग्रहों का उपयोग कर स्थान निर्धारित करता है। शर्तों के आधार पर, इस प्रदाता को स्थान तय करने के लिए कुछ समय लग सकता है।
    • LocationManager.NETWORK_PROVIDER – यह प्रदाता सेल टॉवर और वाईफ़ाई पहुंच बिंदुओं की उपलब्धता के आधार पर स्थान निर्धारित करता है। परिणाम नेटवर्क खोज के माध्यम से पुनर्प्राप्त किए जाते हैं
    • LocationManager.PASSIVE_PROVIDER – यह प्रदाता अन्य प्रदाताओं द्वारा उत्पन्न स्थान वापस करेगा वास्तविक रूप से स्थान स्वयं के अनुरोध के बिना अन्य एप्लिकेशन या सेवाओं का अनुरोध करते समय स्थान अपडेट प्राप्त करते हैं

इसका सारांश यह है कि आपको सिस्टम से LocationManager प्रबंधक का एक ऑब्जेक्ट मिलता है, requestLocationUpdates को कार्यान्वित करता है, और requestLocationUpdates को LocationManager पर कॉल करता है।

यहां एक कोड स्निपेट है:

  LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { // Called when a new location is found by the network location provider. makeUseOfNewLocation(location); } public void onStatusChanged(String provider, int status, Bundle extras) {} public void onProviderEnabled(String provider) {} public void onProviderDisabled(String provider) {} }; // Register the listener with the Location Manager to receive location updates locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 

स्थान की रणनीतियों पर Google के API गाइड कोड को बहुत अच्छी तरह से बताते हैं लेकिन उन्होंने यह भी उल्लेख किया है कि ज्यादातर मामलों में, आपको इसके बजाय Google स्थान सेवाएं API का उपयोग करके बेहतर बैटरी प्रदर्शन और साथ ही अधिक उपयुक्त सटीकता मिल जाएगी। अब भ्रम शुरू होता है!

  1. Google की स्थान सेवाएं API

Google की स्थान सेवाएं एपीआई Google Play सेवाएं एपीके का एक हिस्सा है ( इसे सेट करने के तरीके हैं )। वे एंड्रॉइड के एपीआई के शीर्ष पर बने हैं ये API उपरोक्त उल्लेखित प्रदाताओं के बजाय एक "फ्यूज़ स्थान प्रदाता" प्रदान करते हैं। यह प्रदाता स्वचालित रूप से सटीक, बैटरी उपयोग आदि पर आधारित अंतर्निहित प्रदाता को चुनने के लिए चुनता है। यह तेज़ है क्योंकि आप उस सिस्टम-वाइड सेवा से स्थान प्राप्त करते हैं जो इसे अपडेट करते रहती है और आप अधिक उन्नत सुविधाओं जैसे कि जीओफेन्सिंग का उपयोग कर सकते हैं।

Google की स्थान सेवाओं का उपयोग करने के लिए, आपके ऐप को GooglePlayServicesClient से कनेक्ट करने की आवश्यकता है ग्राहक से कनेक्ट होने के लिए, आपकी गतिविधि (या टुकड़ा, या तो) को GooglePlayServicesClient.ConnectionCallbacks और GooglePlayServicesClient.OnConnectionFailedListener इंटरफेस लागू करने की आवश्यकता है। यहां एक नमूना कोड है:

  public class MyActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener { LocationClient locationClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); locationClient = new LocationClient(this, this, this); } @Override public void onConnected(Bundle bundle) { Location location = locationClient.getLastLocation() ; Toast.makeText(this, "Connected to Google Play Services", Toast.LENGTH_SHORT).show(); } @Override public void onDisconnected() { Toast.makeText(this, "Connected from Google Play Services.", Toast.LENGTH_SHORT).show(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { // code to handle failed connection // this code can be found here — http://developer.android.com/training/location/retrieve-current.html } 
  • LocationClient.getListLocation locationClient.getLastLocation() रिक्त क्यों है?

locationClient.getLastLocation() क्लाइंट से अंतिम ज्ञात स्थान प्राप्त करता है। हालांकि, निलंबित स्थान प्रदाता केवल पृष्ठभूमि स्थान को बनाए रखेगा यदि कम से कम एक ग्राहक उससे जुड़ा होता है। पहला ग्राहक कनेक्ट होने के बाद, यह तुरंत स्थान प्राप्त करने का प्रयास करेगा। यदि आपकी गतिविधि कनेक्ट करने वाला पहला ग्राहक है और आप getLastLocation() कनेक्ट getLastLocation() में onConnected() , तो उस स्थान को आने के लिए पर्याप्त समय नहीं हो सकता। इससे null location null

इस मुद्दे को हल करने के लिए, आपको प्रदाता को स्थान प्राप्त होने तक इंतजार करना (अनिश्चित रूप से) करना होगा और फिर प्राप्त स्थान getLastLocation() , जो कि जानना असंभव है। आवधिक स्थान अपडेट प्राप्त करने के लिए और (पहले अद्यतन प्राप्त करने के बाद इसे बंद करने के लिए) com.google.android.gms.location.LocationListener इंटरफ़ेस को लागू करने के लिए एक अन्य (बेहतर) विकल्प है।

  public class MyActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { // . . . . . . . . more stuff here LocationRequest locationRequest; LocationClient locationClient; @Override protected void onCreate(Bundle savedInstanceState) { // . . . . other initialization code locationClient = new LocationClient(this, this, this); locationRequest = new LocationRequest(); // Use high accuracy locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // Set the update interval to 5 seconds locationRequest.setInterval(UPDATE_INTERVAL); // Set the fastest update interval to 1 second locationRequest.setFastestInterval(FASTEST_INTERVAL); } // . . . . . . . . other methods @Override public void onConnected(Bundle bundle) { Location location = locationClient.getLastLocation(); if (location == null) locationClient.requestLocationUpdates(locationRequest, this); else Toast.makeText(getActivity(), "Location: " + location.getLatitude() + ", " + location.getLongitude(), Toast.LENGTH_SHORT).show(); } // . . . . . . . . other methods @Override public void onLocationChanged(Location location) { locationClient.removeLocationUpdates(this); // Use the location here!!! } 

इस कोड में, आप जांच रहे हैं कि ग्राहक पहले से ही अंतिम स्थान पर है ( onConnected )। यदि नहीं, तो आप अद्यतन प्राप्त करने के लिए जैसे ही स्थान के अपडेट के लिए अनुरोध कर रहे हैं, और अनुरोधों को बंद कर रहे हैं (ऑनलाइन onLocationChanged() कॉलबैक में)।

ध्यान दें कि locationClient.requestLocationUpdates(locationRequest, this); पर onConnected कॉलबैक के अंदर होना चाहिए, या फिर आप एक onConnected प्राप्त करेंगे क्योंकि आप Google Play सेवाओं क्लाइंट से कनेक्ट किए बिना स्थानों के लिए अनुरोध करने का प्रयास करेंगे

  • उपयोगकर्ता ने स्थान सेवाएं अक्षम कर दी हैं

कई बार, उपयोगकर्ता के पास स्थान सेवाएं अक्षम होती हैं (बैटरी, या गोपनीयता कारणों को बचाने के लिए) ऐसे मामले में, उपर्युक्त कोड अभी भी स्थान अपडेट के लिए अनुरोध करेगा, लेकिन onLocationChanged को कभी भी कॉल नहीं किया जाएगा। आप यह जांच कर अनुरोध रोक सकते हैं कि उपयोगकर्ता ने स्थान सेवाओं को अक्षम कर दिया है या नहीं।

यदि आपके ऐप को स्थान सेवाओं को सक्षम करने की आवश्यकता है, तो आप एक संदेश या टोस्ट दिखा सकते हैं। दुर्भाग्यवश, यह जांचने का कोई तरीका नहीं है कि उपयोगकर्ता ने Google की स्थान सेवाएं API में स्थान सेवाओं को अक्षम कर दिया है या नहीं। इसके लिए, आपको एंड्रॉइड के एपीआई पर वापस लौटना होगा।

अपने onCreate विधि में:

  LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { locationEnabled = false; Toast.makeText(getActivity(), "Enable location services for accurate data", Toast.LENGTH_SHORT).show(); } else locationEnabled = true; 

और इस locationEnabled पर अपने onConnected विधि में locationEnabled प्रयोग करें।

  if (location != null) { Toast.makeText(getActivity(), "Location: " + location.getLatitude() + ", " + location.getLongitude(), Toast.LENGTH_SHORT).show(); } else if (location == null && locationEnabled) { locationClient.requestLocationUpdates(locationRequest, this); } 

धन्यवाद राहुल जियारसाल के लिए

आप LocationManager के बजाय Google Play सेवाओं का स्थान एपीआई का उपयोग करना चाहिए डॉक्स के अनुसार:

Google Play सेवाओं की स्थिति एपीआई एंड्रॉइड फ्रेमवर्क लोकेशन एपीआई (एंड्रॉइड। स्थान) पर पसंद करती है, जो आपके ऐप के लिए स्थान जागरूकता जोड़ने का एक तरीका है। यदि आप वर्तमान में एंड्रॉइड फ्रेमवर्क स्थान एपीआई का उपयोग कर रहे हैं, तो आपको यथाशीघ्र Google Play सेवाएं स्थान एपीआई पर स्विच करने के लिए दृढ़ता से प्रोत्साहित किया जाता है।

क्यों स्विच करने के लिए, Google का कहना है:

गूगल प्ले सर्विसेज एपीआई, गूगल प्ले सर्विसेज का हिस्सा, एक अधिक शक्तिशाली, उच्च स्तरीय रूपरेखा प्रदान करता है जो कि स्थान प्रदाताओं, उपयोगकर्ता आंदोलन और स्थान सटीकता को स्वचालित रूप से संभालता है। यह आपके द्वारा प्रदत्त पावर उपभोग के आधार पर स्थान अपडेट शेड्यूलिंग भी संभालता है। अधिकतर मामलों में, आप स्थान सेवा एपीआई का उपयोग करके बेहतर बैटरी प्रदर्शन और साथ ही अधिक उपयुक्त सटीकता प्राप्त करेंगे।

मेरे अनुभव में, "अधिक उपयुक्त सटीकता" का मतलब किसी भी तरह से बेहतर नहीं है। जब तक मुझे कुछ याद नहीं आ रहा है, अगर आप यह सुनिश्चित करना चाहते हैं कि जीपीएस का उपयोग किया जाता है, तो स्थान प्रबंधक को जाने का एकमात्र तरीका है हम अपने ऐप के साथ वाहनों को और फिर से ट्रैक करते हैं, जब तक कि मुझे कुछ याद आ रहा न हो, Google Play सेवाएं बहुत ही गलत स्थानों को अक्सर प्रायः प्रदान करती हैं।

गूगल प्ले सर्विसेज एपीआई , गूगल प्ले सर्विसेज का हिस्सा, एक अधिक शक्तिशाली, उच्च स्तरीय रूपरेखा प्रदान करता है जो कि स्थान प्रदाताओं , उपयोगकर्ता आंदोलन और स्थान सटीकता को स्वचालित रूप से संभालता है । यह आपके द्वारा प्रदत्त पावर उपभोग के आधार पर स्थान अपडेट शेड्यूलिंग भी संभालता है। अधिकतर मामलों में, आप स्थान सेवा एपीआई का उपयोग करके बेहतर बैटरी प्रदर्शन और साथ ही अधिक उपयुक्त सटीकता प्राप्त करेंगे।

दो एपीआईएस Google Play सेवा स्थान एपीआई और एंड्रॉइड फ्रेमवर्क लोकेशन एपीआई के बीच अधिक विस्तृत अंतर यहाँ पाया जा सकता है

मैं कुछ समय के लिए Google स्थान सेवाएं एपीआई का उपयोग कर रहा हूं। इसका लाभ होता है, क्योंकि यह पदों का निर्धारण करने के लिए कई स्रोत होने की जटिलता को समाहित करता है हालांकि यह बहुत भारी है , इसलिए जब आप एक अजीब स्थिति प्राप्त करते हैं, तो आप यह निर्धारित करने का कोई तरीका नहीं है कि यह अजीब स्थिति कहां से आया है।

वास्तविक जीवन में मुझे कई सनकी मूल्यों को पॉप अप हुआ है, वास्तविक स्थिति से 10 किलोमीटर दूर है। केवल स्पष्टीकरण यह है कि इन पागल स्थानों पर गोगल्स वाई-फाई या एनडब्ल्यूके डाटाबेस में त्रुटियों से गुज़रना पड़ता है- जो त्रुटियां हमेशा वहां होंगी, चूंकि वाई-फाई और नेटवर्क टोपोलॉजी हर दिन बदलती हैं। लेकिन दुर्भाग्य से (और आश्चर्यजनक रूप से) एपीआई आपको कोई जानकारी नहीं देता है कि एक व्यक्ति की स्थिति कैसे ली गई थी।

यह आपको गति, त्वरण, असर आदि पर व्यवहार्यता की जांच के आधार पर विचित्र मूल्यों को फ़िल्टर करने की समस्याओं के साथ छोड़ देता है।

… या अच्छे पुराने ढांचे एपीआई पर वापस जाएं और केवल जीपीएस का उपयोग करें, जो कि मैं क्या करूँगा जब तक कि Google ने फ्यूज़ एपीआई में सुधार नहीं किया।