जीपीएस या इंटरनेट का उपयोग किए बिना एंड्रॉइड में उपयोगकर्ता का वर्तमान स्थान प्राप्त करें


91

क्या जीपीएस या इंटरनेट का उपयोग किए बिना उपयोगकर्ता का वर्तमान स्थान प्राप्त करना संभव है? मेरा मतलब मोबाइल नेटवर्क प्रोवाइडर की मदद से है।


1
क्या स्वीकृत उत्तर पूरी तरह से काम करता है? मेरे लिए यह काम नहीं कर रहा है ... !!!
समीथा चतुरंगा

3
दुर्भाग्य से स्वीकार किया गया उत्तर गलत है :-( आश्चर्यजनक है कि उसे 28 उत्थान मिले भले ही वह प्रश्न का सही उत्तर न दे!
डेविड वासर

@DavidWasser आपकी बहुमूल्य टिप्पणियों की सराहना करें। और क्या आपको लगता है कि इंटरनेट या जीपीएस का उपयोग किए बिना स्थान का विवरण प्राप्त करने के लिए वास्तव में कोई विधि नहीं है? (उस सेल ब्रॉडकास्ट मैसेज का उपयोग करने के अलावा)
समीथा चतुरंगा

2
@SamithaChathuranga इस बारे में सोचें: यदि आपके पास कोई जीपीएस नहीं है और आपके पास कोई इंटरनेट नहीं है, तो आप यह जानकारी कहां प्राप्त करने जा रहे हैं? आप सेल आईडी की जानकारी नेटवर्क से प्राप्त कर सकते हैं। इससे आपको केवल आईडी मिलती है। फिर आपको आईडी को वास्तविक समन्वय या नाम से मैप करने का एक तरीका चाहिए होगा। आप हमेशा अपने स्वयं के सेल आईडी डेटाबेस का निर्माण कर सकते हैं और इसे अपने आवेदन में शामिल कर सकते हैं, लेकिन यह आपको उस डेटा को एकत्र करने के लिए बहुत सारा काम लेगा और मैपिंग स्थिर नहीं है: यह बदल जाता है क्योंकि मोबाइल ऑपरेटर नए सेल टॉवर और रेनबेरी स्थापित करते हैं उनके नेटवर्क। मूल रूप से, व्यावहारिक उत्तर "नहीं" है।
डेविड वासर

@DavidWasser उत्तर के लिए धन्यवाद। मुझे भी बड़ा आश्चर्य हुआ कि बिना इंटरनेट या जीपीएस के लोकेशन कैसे मिलेगी। लेकिन कई मंचों में स्टैकेओवरफ्लो सहित यह संभव होने के लिए कहा जाता है। इसलिए मुझे लगा कि यह संभव होगा। लगता है बहुत सारे लोग गुमराह भी हैं।
समिधा चतुर्भुज

जवाबों:


87

आप जो करना चाह रहे हैं वह LocationManager.NETWORK_PROVIDERकरने के बजाय स्थिति का उपयोग करें LocationManager.GPS_PROVIDERNETWORK_PROVIDERजीएसएम या वाईफ़ाई पर इच्छा संकल्प है, जो कभी भी उपलब्ध है। जाहिर है कि वाईफ़ाई बंद करने के साथ, जीएसएम का उपयोग किया जाएगा। ध्यान रखें कि सेल नेटवर्क का उपयोग करना मूल रूप से 500 मी।

http://developer.android.com/guide/topics/location/obtain-user-location.html के पास वास्तव में बहुत अच्छी जानकारी और नमूना कोड है।

अधिकांश कोड के साथ काम करने के बाद OnCreate(), इसे जोड़ें:

// Acquire a reference to the system Location Manager
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);

आप अपनी गतिविधि भी LocationListenerकक्षा को लागू कर सकते हैं और इस प्रकार onLocationChanged()अपनी गतिविधि को लागू कर सकते हैं।


1
बैटरी संरक्षण पर रणनीतियों की जांच करना याद रखें। इसके अलावा, आपके आवेदन के आधार पर, PASSIVE_PROVIDER और getLastKnownLocation का उपयोग करके आप बहुत सारे काम और बैटरी बचा सकते हैं यदि अन्य अनुप्रयोग एंटेना का उपयोग कर रहे हैं।
इयान

2
अरे @ इयान, मैंने एक ही कोड का उपयोग किया है .. लेकिन मेरे मामले में, onLocationChanged () श्रोता विधि को कभी नहीं बुलाया गया। मैंने onResume () पद्धति पर requestLocationUpdates का उपयोग किया। अभी भी यह कभी नहीं बुलाया .. तो वहाँ क्या मुद्दा था?
एम.एस.

2
हे @लन या कोई अन्य व्यक्ति जो मुझे बाहर कोड लागू करने में मेरी मदद कर सकता है, लेकिन onLocationChanged विधि को यह कहा जाता है कि समस्या क्या होगी, जिससे कोई भी मेरी मदद कर सके, कृपया .....
Pareshm

1
क्या इंटरनेट के बिना समन्वय प्राप्त करना संभव है? कुछ उपकरणों में यह काम नहीं कर रहा है।
इमिलिंद

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

16

प्राप्त करने से getLastKnownLocationआप वास्तव में खुद को ठीक नहीं करते हैं।

ध्यान रखें कि यह प्रदाता शुरू कर सकता है , लेकिन यदि उपयोगकर्ता ने पहले कभी कोई स्थान प्राप्त किया है, तो मुझे नहीं लगता कि यह होगा। डॉक्स वास्तव में इस पर बहुत स्पष्ट नहीं हैं।

डॉक्स getLastKnownLocation के अनुसार:

किसी स्थान को दिए गए प्रदाता से प्राप्त अंतिम ज्ञात स्थान फिक्स से डेटा का संकेत देता है। यह प्रदाता को शुरू किए बिना किया जा सकता है।

यहाँ एक त्वरित स्निपेट है:

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;

public class UtilLocation {
    public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Location utilLocation = null;
        List<String> providers = manager.getProviders(enabledProvidersOnly);
        for(String provider : providers){

            utilLocation = manager.getLastKnownLocation(provider);
            if(utilLocation != null) return utilLocation;
        }
        return null;
    }
}

आपको नई अनुमति भी देनी होगी AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

मैं जो सोच रहा हूं, क्या मोबाइल नेटवर्क का उपयोग करके वर्तमान स्थान प्राप्त करना संभव है
प्रभु एम।

आपको डॉक्स पढ़ने की आवश्यकता है। के बीच मतभेदों को जानें PASSIVE_PROVIDER, NETWORK_PROVIDER, और GPS_PROVIDER
hwrdprkns

1
हालांकि यह आदर्श है, मैं गेटटाइम () का उपयोग करके अंतिम स्थान के समय की जांच करूंगा। फिर, यह केवल यह तय करने की बात है कि आप इसे कितना पुराना होने देंगे। यदि यह बहुत पुराना है, तो मेरी पोस्ट का उपयोग करके एक नया स्थान प्राप्त करें।
इयान

1
@ नया या ताज़ा स्थान कैसे प्राप्त करें?
Archie.bpgc

5
क्या हम स्थान प्राप्त कर सकते हैं अगर gps बंद है
प्रसाद

4
boolean gps_enabled = false;
boolean network_enabled = false;

LocationManager lm = (LocationManager) mCtx
                .getSystemService(Context.LOCATION_SERVICE);

gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Location net_loc = null, gps_loc = null, finalLoc = null;

if (gps_enabled)
    gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
    net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (gps_loc != null && net_loc != null) {

    //smaller the number more accurate result will
    if (gps_loc.getAccuracy() > net_loc.getAccuracy()) 
        finalLoc = net_loc;
    else
        finalLoc = gps_loc;

        // I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)

} else {

    if (gps_loc != null) {
        finalLoc = gps_loc;
    } else if (net_loc != null) {
        finalLoc = net_loc;
    }
}

4

नहीं, आप वर्तमान में GPS या इंटरनेट का उपयोग किए बिना स्थान प्राप्त नहीं कर सकते।

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

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

संक्षेप में, स्थान प्राप्त करने के लिए LocationManager.NETWORK_PROVIDER या android.hardware.location.network का उपयोग करने के लिए इंटरनेट के उपयोग की आवश्यकता होती है।

अंतिम ज्ञात स्थिति का उपयोग करने के लिए आपको जीपीएस या इंटरनेट का उपयोग हाल ही में करना होगा। यदि आपके पास बस इंटरनेट था, तो संभवतः आप फिर से इंटरनेट पाने के लिए अपनी स्थिति या सेटिंग्स को समायोजित कर सकते हैं। यदि आपके डिवाइस में GPS या इंटरनेट नहीं है, तो अंतिम ज्ञात स्थिति सुविधा आपकी मदद नहीं करेगी।

जीपीएस या इंटरनेट के बिना, आप कर सकते हैं:

  1. रात के आकाश की तस्वीरें लें और स्टार चार्ट के आधार पर अपने स्थान का अनुमान लगाने के लिए वर्तमान समय का उपयोग करें। संभवतः यह सुनिश्चित करने के लिए अतिरिक्त उपकरणों की आवश्यकता होगी कि आपके चित्रों के कोणों को सही ढंग से मापा जाए।
  2. एक ज्ञात स्थिति से शुरू होने वाले स्थान को ट्रैक करने के लिए एक एक्सेलेरोमीटर का उपयोग करें। इस तरह के दृष्टिकोण में त्रुटि का संचय इसे अधिकांश स्थितियों के लिए अव्यावहारिक बनाता है।

3

यहां जीपीएस और नेटवर्क प्रदाता के उपयोग के बिना उपयोगकर्ता वर्तमान स्थान प्राप्त करना संभव है।

1 है। Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"

2. आपके संदर्भ के लिए यहां क्लिक करें



-1

ऐसा प्रतीत होता है कि जीपीएस का उपयोग किए बिना स्मार्ट फोन को ट्रैक करना संभव है।

सूत्रों का कहना है:

प्राथमिक: "पिनमे: दुनिया भर में एक स्मार्टफ़ोन उपयोगकर्ता पर नज़र रखना"

माध्यमिक: "जीपीएस के बिना एक सेलफोन को कैसे ट्रैक करें- या सहमति"

मुझे अभी तक टीम के अंतिम कोड का लिंक नहीं मिला है। जब मैं करूंगा तो पोस्ट करूंगा, अगर दूसरे ने ऐसा नहीं किया है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.