android - एंड्रॉइड एमुलेटर में जीपीएस स्थान का अनुकरण कैसे करें?
testing android-emulator (20)
मैं परीक्षण के लिए एंड्रॉइड एमुलेटर में देशांतर और अक्षांश प्राप्त करना चाहता हूं।
क्या कोई मुझे यह कैसे प्राप्त कर सकता है?
मैं एक परीक्षण स्थिति में एम्यूलेटर का स्थान कैसे सेट करूं?
"मॉक स्थान प्लगइन" नामक एंड्रॉइड स्टूडियो के लिए एक प्लगइन है। आप इस प्लगइन के साथ कई बिंदुओं का अनुकरण कर सकते हैं। आप इस लिंक में उपयोग के विस्तृत मैनुअल का उपयोग कर सकते हैं: एंड्रॉइड स्टूडियो। नकली स्थान प्लगइन के साथ कई जीपीएस अंक अनुकरण करें
Dalvik डीबग मॉनिटर> एमुलेटर> एमुलेटर नियंत्रण टैब> स्थान नियंत्रण का चयन करें।
डीडीएमएस - android_sdk / उपकरण / ddms या android_sdk / उपकरण / मॉनीटर
अभी तक टिप्पणी नहीं कर सकता है, इसलिए @ectomorphs को यहां अपडेट करना, जो कि टेलनेटिंग के लिए अब ऑथ टोकन होना आवश्यक है। लिनक्स में जो /home/username/.emulator_console_auth_token के अंतर्गत है
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random
FILE = open('/home/username/.emulator_console_auth_token', 'r')
AUTH_TOKEN = FILE.read()
FILE.close()
HOST = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120
LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2
DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1
lat = LAT_SRC
lng = LNG_SRC
tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)
tn.write("auth {0}\n".format(AUTH_TOKEN))
tn.read_until("OK", 5)
tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")
for i in range(SECONDS):
lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG
#tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(lng, lat))
#tn.write("exit\n")
sleep(1)
tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")
print tn.read_all()
एक शेल स्क्रिप्ट से कोई इस तरह कोरिनेट सेट कर सकता है
#!/usr/bin/env bash
export ATOKEN=`cat ~/.emulator_console_auth_token`
echo -ne "auth $ATOKEN\ngeo fix -99.133333 19.43333 2202\n" | nc localhost 5554
आप genymotion जैसे एमुलेटर का उपयोग कर सकते हैं जो आपको अपने वर्तमान जीपीएस स्थान इत्यादि को अनुकरण करने के लिए लचीलापन देता है।
एंड्रॉइड स्टूडियो उपयोगकर्ताओं के लिए:
एमुलेटर चलाओ,
फिर, Tools -> Android ->Android device monitor
Emulator Control
टैब खोलें, और स्थान नियंत्रण समूह का उपयोग करें।
एम्यूलेटर कंसोल में "भू" कमांड का उपयोग करना
कमांड लाइन से नकली स्थान डेटा भेजने के लिए:
अपने एप्लिकेशन को एंड्रॉइड एमुलेटर में लॉन्च करें और अपने एसडीके / टूल निर्देशिका में टर्मिनल / कंसोल खोलें।
एमुलेटर कंसोल से कनेक्ट करें:
telnet localhost 5555
(5555 को बदलें जिसमें आपका एमुलेटर चल रहा है)स्थान डेटा भेजें: * एक निश्चित भू-स्थान भेजने के लिए भौगोलिक फिक्स।
यह आदेश दशमलव डिग्री में अक्षांश और अक्षांश, और मीटर में एक वैकल्पिक ऊंचाई स्वीकार करता है। उदाहरण के लिए:
geo fix -121.45356 46.51119 4392
जब मैं एमुलेटर Google एपीआई के बिना एंड्रॉइड छवि चला रहा था, तो मैं एमुलेटर पर जीपीएस फिक्स पाने में असमर्थ था। जैसे ही मैंने Google एपीआई रखने के लिए छवि को बदल दिया, जीपीएस फिक्स पाने के लिए यहां उल्लिखित सभी तरीकों से काम किया गया।
सुनिश्चित करें कि आप एवीडी बनाते समय Google एपीआई के साथ एक छवि का चयन करें।
नए एमुलेटर के लिए:
http://developer.android.com/tools/devices/emulator.html#extended
असल में, एमुलेटर नियंत्रण (एमुलेटर के दाईं ओर) में तीन बिंदुओं बटन पर क्लिक करें और यह एक मेनू खोल देगा जो आपको स्थान सहित एमुलेटर को नियंत्रित करने की अनुमति देगा
बस एक लाइन में अल्बर्टो गाओना का जवाब बनाओ
token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n geo fix 96.0290791 16.9041016 \n exit") - | nc localhost 5554
5554 adb devices
में दिखाए गए एमुलेटर पोर्ट नंबर adb devices
।
अगर adb emu
काम करता तो बेहतर होता।
मान लें कि आपको एक नक्शादृश्य स्थापित और चल रहा है:
MapView mapView = (MapView) findViewById(R.id.mapview);
final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocation);
myLocation.enableMyLocation();
myLocation.runOnFirstFix(new Runnable() {
public void run() {
GeoPoint pt = myLocation.getMyLocation();
}
});
आपको अपने मैनिफेस्ट में निम्नलिखित अनुमति की आवश्यकता होगी:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
और ग्रहण से एम्यूलेटर को नकली निर्देशांक भेजने के लिए, "विंडो" मेनू पर जाएं, "दृश्य दिखाएं"> "अन्य"> "एमुलेटर नियंत्रण" चुनें, और आप दिखाई देने वाले एमुलेटर नियंत्रण फलक से निर्देशांक भेज सकते हैं।
मैं कई बिंदुओं के लिए एडीबी के माध्यम से जियो फिक्स सेट करने की कोशिश कर रहा था और मेरे ऐप को किसी भी जीपीएस डेटा को देखने में नहीं मिला। लेकिन जब मैंने डीडीएमएस खोलने की कोशिश की, मेरे ऐप की प्रक्रिया का चयन किया और एमुलेटर नियंत्रण टैब के माध्यम से निर्देशांक भेजकर यह तुरंत काम किया।
मैं जीपीएस भेजने के लिए ग्रहण प्लग डीडीएमएस समारोह का उपयोग करें।
मैक, लिनक्स या सिगविन में:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
यह आपको मेक्सिको सिटी में रखेगा। तदनुसार अपनी रेखांश / अक्षांश / ऊंचाई बदलें। यदि आप निमा में रुचि नहीं रखते हैं तो यह पर्याप्त होना चाहिए।
यदि आप Eclipse
का उपयोग कर रहे हैं, तो Window->Open Perspective->DDMS
, फिर Location Controls
में एक टाइप करें और Send
दबाएं।
यदि आप ग्रहण का उपयोग कर रहे हैं तो एमुलेटर नियंत्रक का उपयोग करके आप मैन्युअल रूप से अक्षांश और देशांतर निर्धारित कर सकते हैं और अपने मानचित्र आधारित ऐप को एमुलेटर में चला सकते हैं
यदि उपर्युक्त समाधान काम नहीं करते हैं। इसे इस्तेमाल करे:
अपने एंड्रॉइड Manifest.xml के अंदर, एप्लिकेशन टैग के बाहर निम्नलिखित दो लिंक जोड़ें, लेकिन पाठ्यक्रम के अपने मेनिफेस्ट टैग के अंदर
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
लिनक्स में जहां संचार बंदरगाहों को अवरुद्ध कर दिया जाता है। android sdk
अंदर टर्मिनल-टूल्स फ़ोल्डर में टर्मिनल पर नेविगेट करें और इस कमांड को फायर करें:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
शेल कमांड " जियो फिक्स ... " का उपयोग करने के लिए पहले से ही कई बार जवाब दिया गया सही जवाब है। लेकिन यदि आप अपने डेटा को पुनर्प्राप्त करने के लिए LocationClient.getLastLocation () का उपयोग करते हैं तो यह उल्लेख करना महत्वपूर्ण है कि यह पहले काम नहीं करेगा। स्थान क्लाइंट क्लाइंट निर्देशांक पुनर्प्राप्त करने के लिए Google Play सेवा का उपयोग करता है। मेरे लिए यह एक बार अनुकरणकर्ता मानचित्र ऐप चलाने के बाद काम करना शुरू कर दिया। पहली शुरुआत के दौरान आपको Google ऐप्स को आपके स्थान तक पहुंचने की अनुमति देने के लिए कहा जाता है, जो मुझे लगता है कि यह चाल है।
उपयोगकर्ता स्थान प्राप्त करना देखें
नकली स्थान डेटा प्रदान करने के तहत देखो। आपको इसके लिए समाधान मिल जाएगा।