डिवाइस पर Android मॉक लोकेशन?


147

मैं भौतिक उपकरण (Nexus One) पर अपना स्थान कैसे मॉक कर सकता हूं? मुझे पता है कि आप एमुलेटर कंट्रोल पैनल में एमुलेटर के साथ ऐसा कर सकते हैं, लेकिन यह एक भौतिक डिवाइस के लिए काम नहीं करता है।


डेस्कटॉप कंप्यूटर के लिए आप ऐसे ड्राइवर बना सकते हैं / स्थापित कर सकते हैं जो इस तरह के परीक्षण करने के उद्देश्य से एक जीपीएस डिवाइस / सीरियल पोर्ट डिवाइस का अनुकरण करते हैं। शायद आप Android के लिए कुछ समान बना या पा सकते हैं।
एरोनल्स

6
Market में कई एप्लिकेशन हैं जो GPS लोकेशन का अनुकरण कर सकते हैं। उदाहरण के लिए "स्थान स्पूफर"।
व्लाद

स्टोर में बहुत सारे ऐप हैं जो ऐसा करते हैं .. आप यह कोशिश कर सकते हैं - play.google.com/store/apps/… या यह - play.google.com/store/apps/…
Yehuda

1
स्टोर में एक ऐप भी है जो एमुलेटर की तरह "जियो फिक्स" और "जियो एनएमए" कमांड का समर्थन करता है! play.google.com/store/apps/…
luv

@ इस पर और अधिक खुला स्रोत github.com/luv/mockgeofix
व्लाद

जवाबों:


166

ऐसा लगता है कि ऐसा करने का एकमात्र तरीका एक नकली स्थान प्रदाता का उपयोग करना है।

आपको अपनी सेटिंग में विकास पैनल में स्थानों को सक्षम करना होगा और जोड़ना होगा

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

आपके प्रकट करने के लिए।

अब आप अपने कोड में जाकर अपना मॉक लोकेशन प्रोवाइडर बना सकते हैं और इस प्रोवाइडर की लोकेशन सेट कर सकते हैं।


83
बाजार पर एक आवेदन है जिसे "फेक जीपीएस" कहा जाता है। यदि आप अपने डिवाइस पर मॉक लोकेशन को सक्षम करते हैं, तो यह आपके स्थान को सेट करने के लिए एक अच्छा GUI प्रदान करता है। मुझे लगता है कि यह एक ऐसा करने वाला समाधान नहीं है, लेकिन निश्चित रूप से त्वरित परीक्षण के लिए एक योग्य समाधान है।
टिम ग्रीन

2
यह लिंक हो सकता है - समान दिनांक, और प्रासंगिक सामग्री।
DefenestrationDay

4
@TimGreen आपका स्वीकृत उत्तर होना चाहिए (केवल टिप्पणी नहीं)! परीक्षण के लिए अब तक का सबसे आसान तरीका है
बोसोन

वास्तव में "नकली जीपीएस" आवेदन सबसे अच्छा नहीं है क्योंकि यह केवल स्थान निर्धारित कर सकता है और बेतरतीब ढंग से घूम सकता है। उनका नया संस्करण रूट कर सकता है, लेकिन यह केवल स्थान पर बहुत अधिक कूदता है। Janusz उत्तर वास्तव में सही है कि आपको अपना स्वयं का मॉक प्रदाता बनाने की आवश्यकता है। हमने हाल ही में ऐसा किया है और अगर किसी को इसकी आवश्यकता है या यदि इस प्रश्न को अभी भी मदद की आवश्यकता है, तो मैं कोड पोस्ट करूंगा।
vkinra

5
बयान "अपने कोड में जाएं और अपना स्वयं का नकली स्थान प्रदाता बनाएं" को अधिक विस्तार से समझाया जाना चाहिए।
मंद

102

यदि आप इस फोन को केवल विकास प्रयोगशाला में उपयोग करते हैं, तो एक मौका है कि आप जीपीएस चिप को दूर कर सकते हैं और सीरियल डिवाइस को सीधे दूसरे डिवाइस से NMEA दृश्यों के साथ फीड कर सकते हैं।


68
बैर क्यों? यह उत्तर बहुत कठिन कोर है।
बेन ज़ोटो

61
अजीब कट्टर हालांकि अजीब बेकार / अप्रासंगिक भी।
ओलिवेर्बक

13
मज़ा पर्याप्त है, यद्यपि।
एटिने

23
उम, मुझे लगता है कि किसी को भी जिनके लिए यह उत्तर प्रासंगिक होगा, पहले से ही जानता है कि वे ऐसा कर सकते हैं। मुझे संदेह है कि वे तीन लोग समाधान के लिए स्टैकओवरफ्लो खोज रहे हैं।
टूलमेकरस्टेव

10
अगर आपको यह पता लगाने में परेशानी हो रही है कि आपके बिना सुलझे हुए डिवाइस में यथार्थवादी NMEA सीक्वेंस कैसे जेनरेट किए जाते हैं, तो एक बढ़िया विकल्प है: सोल्डर एक वास्तविक बाहरी जीपीएस डिवाइस और पूरे विकास लैब को एक वास्तविक ट्रैक पर, धावकों / बल्लेबाजों की टीम के शीर्ष पर ले जाना। कारों / विमानों / जो कुछ भी आप अनुकरण करना चाहते हैं गति के आधार पर। विकास प्रयोगशाला की छत में एक छेद खोलने के लिए मत भूलना ताकि डिवाइस उपग्रहों से रेडियो सिग्नल प्राप्त कर सके। आपका स्वागत है। ;-)
स्टीफन गौरीचॉन

32

काश मेरे पास मेरा केबल होता। मुझे पता है कि आप एमुलेटर को अपनी जगह बदलने के लिए टेलनेट कर सकते हैं

$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK

मुझे याद नहीं है कि आप अपने डिवाइस को टेलनेट कर सकते हैं, लेकिन मुझे लगता है कि आप कर सकते हैं। आशा है कि ये आपकी मदद करेगा।

आपको इसके लिए (CLI) adb (android debugging bridge) की आवश्यकता होगी।


आपको अपने डिवाइस के कंसोल पर कमांड के रूप में भेजने वाली हर चीज़ के लिए अनुमति मिलती है। शायद यह एक टर्मिनल एप्लिकेशन के साथ संभव है लेकिन मुझे लगता है कि रूट एक्सेस की आवश्यकता है
Janusz

बस हम एक ही पृष्ठ पर हैं: आप "adb शेल" के बारे में बात नहीं कर रहे हैं? मैं जिस बारे में बात कर रहा हूं वह अलग है, यह कुछ सेटअप है जो आपको एंड्रॉइड-विशिष्ट पैरामीटर सेट करने की अनुमति देता है। मुझे पता है, उदाहरण के लिए, आप बिना रूट एक्सेस के (यानी लोकलहोस्ट: 1234 फोन पर चला जाता है: 1234) सेटअप कर सकते हैं, ताकि आप केबल W / o रूट के माध्यम से SOCKS प्रॉक्सी और सुरंग सेटअप कर सकें।
टिम ग्रीन

आप adb फॉरवर्ड tcp: 6000 tcp: 23 का उपयोग कर सकते हैं डिवाइस पर पोर्ट 23 के लिए अपनी मशीन पर पोर्ट 6000 से forwward करने के लिए, लेकिन पोर्ट के रूप में दिखाए जाने पर भी मैं कनेक्ट नहीं कर पा रहा था। डिवाइस पर टेलनेट क्लाइंट का उपयोग करना और लोकलहोस्ट से कनेक्ट करना भी विफल हो जाता है
Janusz

15
यह एमुलेटर के लिए ठीक काम करता है लेकिन वास्तविक डिवाइस के लिए काम नहीं करता है। इसलिए यह ओपी के सवाल का जवाब नहीं देता है :(
मैथ्यू गिलियार्ड

4
@TimGreen आपका समाधान केवल एमुलेटर के लिए है। सवाल असली डिवाइस को लेकर था।
इगोरगानापोलस्की

29

लोकेशन सर्विसेज़ की अनुमति का इस्तेमाल आप लोकेशन मॉक करने के लिए कर सकते हैं ...

"android.permission.ACCESS_MOCK_LOCATION"

और फिर आपके जावा कोड में,

// Set location by setting the latitude, longitude and may be the altitude...
String[] MockLoc = str.split(",");
Location location = new Location(mocLocationProvider);            
Double lat = Double.valueOf(MockLoc[0]);
location.setLatitude(lat);
Double longi = Double.valueOf(MockLoc[1]);
location.setLongitude(longi);
Double alti = Double.valueOf(MockLoc[2]);
location.setAltitude(alti);

9
mocLocationProvider के मूल्य में क्या है?
विक्टर

उदाहरण LocationManager.GPS_PROVIDER
enigma969

25

मुझे निम्नलिखित कोड के साथ सफलता मिली है। यद्यपि यह मुझे किसी कारण के लिए एक ही ताला मिला (भले ही मैंने अलग-अलग लाटलिंग जोड़े की कोशिश की हो), इसने मेरे लिए काम किया। mLocationManagerएक है LocationManagerजो एक को झुका है LocationListener:

private void getMockLocation()
{
    mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
    mLocationManager.addTestProvider
    (
      LocationManager.GPS_PROVIDER,
      "requiresNetwork" == "",
      "requiresSatellite" == "",
      "requiresCell" == "",
      "hasMonetaryCost" == "",
      "supportsAltitude" == "",
      "supportsSpeed" == "",
      "supportsBearing" == "",

      android.location.Criteria.POWER_LOW,
      android.location.Criteria.ACCURACY_FINE
    );      

    Location newLocation = new Location(LocationManager.GPS_PROVIDER);

    newLocation.setLatitude (/* TODO: Set Some Lat */);
    newLocation.setLongitude(/* TODO: Set Some Lng */);

    newLocation.setAccuracy(500);

    mLocationManager.setTestProviderEnabled
    (
      LocationManager.GPS_PROVIDER, 
      true
    );

    mLocationManager.setTestProviderStatus
    (
       LocationManager.GPS_PROVIDER,
       LocationProvider.AVAILABLE,
       null,
       System.currentTimeMillis()
    );      

    mLocationManager.setTestProviderLocation
    (
      LocationManager.GPS_PROVIDER, 
      newLocation
    );      
}

1
अच्छा पोस्ट, परिवर्धन के लिए नीचे मेरा जवाब देखें।
--सिरसोर

जहाँ तक मुझे याद है, setTestProviderStatusइसका उपयोग यहाँ पर एक घटना को सूचित करने / स्थान देने / करने के लिए किया जाता है जिसका स्थान LocationManager के पास है कि GPS प्रदाता ने "अब" ठीक कर लिया है ताकि उक्त घटना का प्रसंस्करण हो सके।
Dr1Ku

"जिसका अर्थ mLocationManagerहै LocationManagerजो लोकेशनलिस्ट तक पहुंच गया है " का अर्थ क्या है ? मैं यह कैसे कर सकता हूँ? धन्यवाद ..
येहुद

यहां एक लेख में बताया गया है कि LocationManagerसेवा का उपयोग करके स्थान परिवर्तन की जांच कैसे करें LocationListener: a। Blog.doityourselfandroid.com/2010/12/25/…
Dr1Ku

2
प्लस जिस तरह से आप का प्रतिनिधित्व सच (रों) और झूठे (रों) विधि addTestProvider में के लिए 1
A.Alqadomi

16

Dr1Ku ने क्या काम किया है। आज कोड का उपयोग किया है लेकिन अधिक स्थानों को जोड़ने के लिए आवश्यक है। तो यहाँ कुछ सुधार कर रहे हैं:

वैकल्पिक: LocationManager.GPS_PROVIDER स्ट्रिंग का उपयोग करने के बजाय, आप अपने स्वयं के constVIDER_NAME को परिभाषित करना और उसका उपयोग करना चाह सकते हैं। स्थान अद्यतनों के लिए पंजीकरण करते समय, किसी प्रदाता को मापदंड के माध्यम से सीधे स्ट्रिंग के रूप में निर्दिष्ट करने के बजाय चुनें।

पहला: RemoveTestProvider को कॉल करने के बजाय, पहले देखें कि क्या कोई प्रदाता हटाया जाना है (IllegalArgumentException से बचने के लिए):

if (mLocationManager.getProvider(PROVIDER_NAME) != null) {
  mLocationManager.removeTestProvider(PROVIDER_NAME);
}

दूसरा: एक से अधिक स्थान प्रकाशित करने के लिए, आपको स्थान के लिए समय निर्धारित करना होगा:

newLocation.setTime(System.currentTimeMillis());
...
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);

ऐसा लगता है कि एक Google परीक्षण भी है जो MockLocationProviders का उपयोग करता है: http://grepcode.com/file/repository.grepcode.com/java/ext/google.android/android/1.5_r4/android/location/LocationManagerProProTest.java

एक और अच्छा काम करने वाला उदाहरण यहां पाया जा सकता है: http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/

एक और अच्छा लेख है: http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358 आपको कुछ कोड भी मिलेंगे जो वास्तव में काम करते हैं मुझे एमुलेटर पर।


अपने स्वयं के प्रदाता को परिभाषित करने के बारे में अच्छा सुझाव, GPS_PROVIDER का उपयोग करने के साथ बात यह है कि आप (जाहिरा तौर पर) नकली प्रदाता से छुटकारा नहीं पा सकते हैं (अधिक सटीक रूप से, आप सामान्य जीपीएस पर स्विच नहीं कर सकते हैं) जब तक रिबूट नहीं किया जाता है। के रूप में अच्छी तरह से पोस्ट, मैं संदर्भ की जाँच करेंगे!
Dr1Ku

@ Dr1KU क्या यह अभी भी मामला है कि आप सामान्य जीपीएस पर वापस स्विच नहीं कर सकते हैं? क्या यह कहीं निर्दिष्ट है?
काज़ ड्रैगन

@KazDragon उस समय का मामला था। मैं जो भी याद कर सकता हूं, उसे चालू करने के बाद Mock Provider, सामान्य जीपीएस काम नहीं करेगा, मुझे फिक्स नहीं मिल सकता है (मैं सीधे एक डिवाइस पर परीक्षण कर रहा था)। Android में बहुत कुछ होने के बाद से ऐसा नहीं हो सकता है।
Dr1Ku

@ Dr1Ku आह, ठीक है, मैं अब कुछ ऐसा ही कर रहा हूं और आपके द्वारा वर्णित समान परिणाम प्राप्त कर रहा हूं। मैं यह जानने की उम्मीद कर रहा था कि क्या यह मंच में बनाया गया प्रतिबंध था या कि मैं कहीं एक फ़ंक्शन कॉल को याद कर रहा था। मुझे शायद इससे एक सवाल करना चाहिए।
काज़ ड्रैगन

9

एंड्रॉइड मार्केट में ऐसे एप्लिकेशन उपलब्ध हैं जो आपको अपने डिवाइस के लिए "मॉक जीपीएस लोकेशन" निर्दिष्ट करने की अनुमति देते हैं।

मैंने https://market.android.com को खोजा और "माय फ़ेक लोकेशन" नामक एक ऐप मिला जो मेरे लिए काम करता है।

ऊपर पॉल द्वारा उल्लिखित मॉक जीपीएस प्रदाता ( http://www.cowlumbus.nl/forum/MockGpsProvider.zip पर ) एक अन्य उदाहरण है जिसमें स्रोत कोड शामिल है - हालांकि मैं प्रदान की गई एपीके को स्थापित करने में सक्षम नहीं था (इसे कहते हैं विफलता [INSTALL_FAILED_OLDER_SDK] और बस एक recompile की आवश्यकता हो सकती है)

GPS मॉक स्थानों का उपयोग करने के लिए आपको अपनी डिवाइस सेटिंग में इसे सक्षम करना होगा। सेटिंग पर जाएं -> एप्लिकेशन -> डेवलपमेंट और चेक करें "मॉक लोकेशन की अनुमति दें"

फिर आप जीपीएस निर्देशांक सेट करने के लिए ऊपर वर्णित लोगों की तरह एक ऐप का उपयोग कर सकते हैं और Google मानचित्र और अन्य एप्लिकेशन आपके द्वारा निर्दिष्ट मॉक जीपीएस स्थान का उपयोग करेंगे।


नकली जीपीएस सरल है। मैं सोच रहा हूँ कि वे ऐप अनुमति में कॉलर आईडी के लिए क्यों पूछ रहे हैं: एस
गिलोय मास

8

यह मेरे लिए काम किया (Android Studio):

फ़ोन पर GPS और WiFi ट्रैकिंग अक्षम करें। एंड्रॉइड 5.1.1 और नीचे पर, डेवलपर विकल्पों में "सक्षम मॉक स्थानों" का चयन करें।

Src / डिबग डायरेक्टरी में अपने मैनिफ़ेस्ट की एक प्रति बनाएँ। इसे निम्नलिखित में जोड़ें ("एप्लिकेशन" टैग के बाहर):

उपयोग-अनुमति Android: नाम = "android.permission.ACCESS_MOCK_LOCATION"

एक नक्शा सेट करें, जिसे "मैप" कहा जाता है। निम्नलिखित कोड onCreate () में शामिल करें:

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new MyLocationListener();
if (lm.getProvider("Test") == null) {
    lm.addTestProvider("Test", false, false, false, false, false, false, false, 0, 1);
}
lm.setTestProviderEnabled("Test", true);
lm.requestLocationUpdates("Test", 0, 0, ll);

map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng l) {
        Location loc = new Location("Test");
        loc.setLatitude(l.latitude);
        loc.setLongitude(l.longitude);
        loc.setAltitude(0); 
        loc.setAccuracy(10f);
        loc.setElapsedRealtimeNanos(System.nanoTime());
        loc.setTime(System.currentTimeMillis()); 
        lm.setTestProviderLocation("Test", loc);
    }
};

ध्यान दें कि आपको "setElapsedRealtimeNanos" विधि का उपयोग करने के लिए अपने मॉड्यूल ग्रेडल फ़ाइल में "minSdkVersion" को अस्थायी रूप से 17 तक बढ़ाना पड़ सकता है।

मुख्य गतिविधि वर्ग के अंदर निम्नलिखित कोड शामिल करें:

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        // do whatever you want, scroll the map, etc.
    }
}

AS के साथ अपना ऐप चलाएं। एंड्रॉइड 6.0 और इसके बाद के संस्करण पर आपको एक सुरक्षा अपवाद मिलेगा। अब Settings में Developer Options पर जाएं और "Select mock location app" चुनें। सूची से अपना ऐप चुनें।

अब जब आप मानचित्र पर टैप करते हैं, तो OnLocationChanged () आपके टैप के निर्देशांक के साथ फायर करेगा।

मुझे अभी यह पता लगा है कि अब मुझे हाथ में फोन के साथ पड़ोस में नहीं घूमना है।


मुझे लगता है कि यह एंड्रॉइड 6 पर काम करता है यदि आप इस कोड को सेवा में रखते हैं
हमजा

7

मैंने एक साधारण हैंडलर बनाया है जो प्रारंभिक स्थिति से एक गतिशील स्थिति का अनुकरण कर रहा है।

इसे अपने कनेक्शन कॉलबैक में शुरू करें:

private final GoogleApiClient.ConnectionCallbacks mConnectionCallbacks = new GoogleApiClient.ConnectionCallbacks() {
    @Override
    public void onConnected(Bundle bundle) {
        if (BuildConfig.USE_MOCK_LOCATION) {
            LocationServices.FusedLocationApi.setMockMode(mGoogleApiClient, true);
            new MockLocationMovingHandler(mGoogleApiClient).start(48.873399, 2.342911);
        }
    }

    @Override
    public void onConnectionSuspended(int i) {

    }
};

हैंडलर वर्ग:

   private static class MockLocationMovingHandler extends Handler {

    private final static int SET_MOCK_LOCATION = 0x000001;
    private final static double STEP_LATITUDE =  -0.00005;
    private final static double STEP_LONGITUDE = 0.00002;
    private final static long FREQUENCY_MS = 1000;
    private GoogleApiClient mGoogleApiClient;
    private double mLatitude;
    private double mLongitude;

    public MockLocationMovingHandler(final GoogleApiClient googleApiClient) {
        super(Looper.getMainLooper());
        mGoogleApiClient = googleApiClient;
    }

    public void start(final double initLatitude, final double initLongitude) {
        if (hasMessages(SET_MOCK_LOCATION)) {
            removeMessages(SET_MOCK_LOCATION);
        }
        mLatitude = initLatitude;
        mLongitude = initLongitude;
        sendEmptyMessage(SET_MOCK_LOCATION);
    }

    public void stop() {
        if (hasMessages(SET_MOCK_LOCATION)) {
            removeMessages(SET_MOCK_LOCATION);
        }
    }

    @Override
    public void handleMessage(Message message) {
        switch (message.what) {
            case SET_MOCK_LOCATION:
                Location location = new Location("network");
                location.setLatitude(mLatitude);
                location.setLongitude(mLongitude);
                location.setTime(System.currentTimeMillis());
                location.setAccuracy(3.0f);
                location.setElapsedRealtimeNanos(System.nanoTime());
                LocationServices.FusedLocationApi.setMockLocation(mGoogleApiClient, location);

                mLatitude += STEP_LATITUDE;
                mLongitude += STEP_LONGITUDE;
                sendEmptyMessageDelayed(SET_MOCK_LOCATION, FREQUENCY_MS);
                break;
        }
    }
}

आशा है कि यह मदद कर सकता है ..


6

Icyerasor द्वारा उल्लिखित समाधान और पेड्रो द्वारा http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ पर मेरे लिए बहुत अच्छा काम किया गया है। हालाँकि, यह मॉक जीपीएस प्रदाता को ठीक से शुरू करने, रोकने और पुनः आरंभ करने के लिए समर्थन प्रदान नहीं करता है।

मैंने उसके कोड को थोड़ा बदल दिया है और कक्षा को थ्रेड के बजाय AsyncTask होने के लिए फिर से लिखा है। यह हमें UI थ्रेड के साथ संवाद करने की अनुमति देता है, इसलिए हम प्रदाता को उस बिंदु पर पुनः आरंभ कर सकते हैं जहां हम थे जब हमने इसे रोक दिया था। यह तब काम आता है जब स्क्रीन ओरिएंटेशन बदलता है।

कोड ग्रहण के लिए एक नमूना परियोजना के साथ, GitHub पर पाया जा सकता है: https://github.com/paulhoux/Android-MockProviderGPS

ज्यादातर मेहनत करने के लिए सारा श्रेय पेड्रो को जाना चाहिए।


6

अपने प्रकट में जोड़ें

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"
    tools:ignore="MockLocation,ProtectedPermissions" />

मॉक लोकेशन फंक्शन

void setMockLocation() {
    LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false,
            false, false, true, true, true, 0, 5);
    locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);

    Location mockLocation = new Location(LocationManager.GPS_PROVIDER);
    mockLocation.setLatitude(-33.852);  // Sydney
    mockLocation.setLongitude(151.211);
    mockLocation.setAltitude(10);
    mockLocation.setAccuracy(5);
    mockLocation.setTime(System.currentTimeMillis());
    mockLocation.setElapsedRealtimeNanos(System.nanoTime());
    locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation);
}

आपको अपने डिवाइस डेवलपर सेटिंग में नकली स्थानों को सक्षम करना होगा। यदि यह उपलब्ध नहीं है, तो उपरोक्त लागू होने के बाद अपने आवेदन में "मॉक लोकेशन एप्लिकेशन" सेट करें।


3

गूगल प्ले से फेक जीपीएस ऐप ने मेरे लिए ट्रिक बनाई। बस सुनिश्चित करें कि आप एप्लिकेशन विवरण में सभी दिशाओं को पढ़ें। "फ़ेक जीपीएस" सक्षम करने के बाद आपको अन्य स्थान सेवाओं को अक्षम करना होगा और साथ ही साथ अपना ऐप भी शुरू करना होगा। मुझे जो चाहिए उसके लिए बहुत मेहनत की।

यहां GooglePlay पर ऐप का लिंक दिया गया है: फेक जीपीएस



2

फेक जीपीएस ऐप इंस्टॉल करें https://play.google.com/store/apps/details?id=com.incorporateapps.fakegps.fre&hl=en

डेवलपर विकल्प -> मॉक लोकेशन ऐप चुनें (इसका मतलब है, फेक लोकेशन ऐप चुना गया है)।

नकली जीपीएस ऐप :

जोड़ने के लिए मानचित्र पर डबल टैब -> प्ले बटन पर क्लिक करें -> टोस्ट दिखाएं "नकली स्थान रोका गया"

अंत में गूगल मैप ऐप्स से जांच करें।


2

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

प्रोजेक्ट रिपॉजिटरी: https://github.com/juliusmh/RemoteGeoFix


1

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

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

    ll = new LocationListener() {        
        public void onLocationChanged(Location location) {  
          // Called when a new location is found by the network location provider.  
            onGPSLocationChanged(location); 
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {       
            bigInfo.setText("Changed "+ status);  
        }

        public void onProviderEnabled(String provider) {
            bigInfo.setText("Enabled "+ provider);
        }

        public void onProviderDisabled(String provider) {
            bigInfo.setText("Disabled "+ provider);
        }
      };

जब जीपीएस अपडेट किया जाता है, तो आप इसे करने के लिए निम्न विधि को फिर से लिखना चाहते हैं;

public void onGPSLocationChanged(Location location){  
if(location != null){  
    double pLong = location.getLongitude();  
    double pLat = location.getLatitude();  
    textLat.setText(Double.toString(pLat));  
    textLong.setText(Double.toString(pLong));  
    if(autoSave){  
        saveGPS();  
        }
    }
}

इसे मत प्रकट करना भूल जाओ
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION


0

मुझे आश्चर्य है कि अगर आपको विस्तृत मॉक लोकेशन सेटअप की आवश्यकता है। मेरे मामले में एक बार मुझे एक निश्चित स्थान मिल गया, मैं उस नए स्थान के साथ कुछ करने के लिए एक फ़ंक्शन को बुला रहा था। एक टाइमर में एक नकली स्थान बनाएँ। और इसके स्थान पर फ़ंक्शन को कॉल करें। कुछ ही समय में यह जानकर कि जीपीएस वास्तविक वर्तमान स्थान के साथ आएगा। जो ठीक है। यदि आपके पास अपडेट का समय पर्याप्त रूप से लंबा है।


0

हो सकता है कि यह 'प्रोग्रामर' दृष्टिकोण नहीं है, लेकिन यदि आप अपना समय बचाना चाहते हैं और काम का समाधान प्राप्त करना चाहते हैं, तो उन ऐप्स में से एक को आज़माएं, जो Google Play में उपलब्ध नकली स्थान के लिए समर्पित हैं:

नकली जीपीएस स्थान Spoofer

मॉक लोकेशन

नकली जीपीएस लोकेशन


1
क्या आपने उन्हें आजमाया? क्या उन्होंने प्रश्न में अनुरोध के अनुसार काम किया?
arekolek

कोई तरजीह? या क्या उन सभी की आवश्यकता है? : P
arekolek

नकली GPS लोकेशन Spoofer काफी अच्छी है, लेकिन Mock Locations एक मार्ग निर्धारित करने की अनुमति देता है जो एक अच्छी सुविधा है।
किलामत

0

एंड्रॉइड फोन और टैबलेट (CATLES नाम) के लिए बहुत सुविधाजनक और मुफ्त इंटरैक्टिव स्थान सिम्युलेटर का उपयोग करें। यह सिस्टम-वाइड लेवल (यहां तक ​​कि Google मैप्स या फेसबुक ऐप्स के भीतर) पर जीपीएस-लोकेशन का मजाक उड़ाता है और यह फिजिकल के साथ-साथ वर्चुअल डिवाइसेज पर भी काम करता है:

वेबसाइट: http://ubicom.snet.tu-berlin.de/catles/index.html

वीडियो: https://www.youtube.com/watch?v=0WSwH5gK7yg


0

मेनिफ़ेस्ट फ़ाइल में इस अनुमति का उपयोग करें

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">

एंड्रॉइड स्टूडियो अनुशंसा करेगा कि "नकली स्थान केवल एक परीक्षण या डिबग-विशिष्ट मैनिफ़ेस्ट फ़ाइल (आमतौर पर src / debug / AndroidManifest.xml) में अनुरोध किया जाना चाहिए" निरीक्षण को अक्षम करें

अब सुनिश्चित करें कि आपने अपने फ़ोन की डेवलपर सेटिंग में " अनुमति दें नकली स्थान " की जाँच कर ली है

स्थान प्रबंधक का उपयोग करें

locationManager.addTestProvider(mocLocationProvider, false, false,
                false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(mocLocationProvider, true);

अब आप जहां चाहें लोकेशन सेट करें

Location mockLocation = new Location(mocLocationProvider); 
mockLocation.setLatitude(lat); 
mockLocation.setLongitude(lng); 
mockLocation.setAltitude(alt); 
mockLocation.setTime(System.currentTimeMillis()); 
locationManager.setTestProviderLocation( mocLocationProvider, mockLocation); 

0

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

locationProvider = FusedLocationProviderClient(context)
locationProvider.setMockMode(true)

val loc = Location(providerName)
val mockLocation = Location(providerName) // a string
mockLocation.latitude = latitude  // double
mockLocation.longitude = longitude
mockLocation.altitude = loc.altitude
mockLocation.time = System.currentTimeMillis()
mockLocation.accuracy = 1f
mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    mockLocation.bearingAccuracyDegrees = 0.1f
    mockLocation.verticalAccuracyMeters = 0.1f
    mockLocation.speedAccuracyMetersPerSecond = 0.01f
}
//        locationManager.setTestProviderLocation(providerName, mockLocation)
locationProvider.setMockLocation(mockLocation)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.