2009-12-29 19 views

उत्तर

27

हां।

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

वैकल्पिक रूप से, आप बस एमुलेटर को टेलनेट और कमांड लाइन है, जो निश्चित अक्षांश और देशांतर निर्देशांक के साथ-साथ NMEA डेटा वाक्य का समर्थन करता है से भू आदेश का उपयोग कर सकते हैं: एक उपयोग करने के लिए

telnet localhost 5554 
geo fix -82.411629 28.054553 
geo nmea $GPGGA,001431.092,0118.2653,N,10351.1359,E,0,00,,-19.6,M,4.1,M,,0000*5B 
+3

वास्तविक डिवाइस पर परीक्षण के बारे में क्या - आप अपने जीईओ को एडीबी पर कैसे सेट कर सकते हैं? – fijiaaron

+0

बहुत बहुत धन्यवाद। मैंने बहुत सारी जांच की, और अब मेरे पास जवाब है! – eav

+0

हाय। मुझे एक ही समस्या थी, मैं "भौगोलिक फिक्स" कमांड का उपयोग कर एक असली डिवाइस पर परीक्षण करना चाहता था, यह पता चला कि यह बॉक्स से बाहर नहीं है इसलिए मैंने एक ऐप लिखा जो उस कार्यक्षमता को प्रदान करता है :) [मॉकजीओफिक्स] (https: // play .google.com/store/apps/details? id = github.luv.mockgeofix और hl = en) और [स्रोत कोड] (https://github.com/luv/mockgeofix/) – luv

3

शायद this परीक्षण आवेदन या this आपकी मदद कर सकता है।

15

हो सकता है कि आप चाहते हैं एक यूनिट परीक्षण, तो आप इस कोशिश कर सकते हैं ताकि:

public class GPSPollingServiceTest extends AndroidTestCase { 
    private LocationManager locationManager; 

    public void testGPS() { 
     LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE); 
     locationManager.addTestProvider("Test", false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE); 
     locationManager.setTestProviderEnabled("Test", true); 

     // Set up your test 

     Location location = new Location("Test"); 
     location.setLatitude(10.0); 
     location.setLongitude(20.0); 
     locationManager.setTestProviderLocation("Test", location); 

     // Check if your listener reacted the right way 

     locationManager.removeTestProvider("Test"); 
    } 
} 


इसके लिए काम करने के लिए आप भी AndroidManifest.xml करने के लिए एक आवश्यक अनुमति की जरूरत है:

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

हाय, क्या आप कृपया थोड़ा और बता सकते हैं विस्तृत करें कि यह कोड कैसे काम करता है। स्थान घटनाओं का जवाब देने वाली गतिविधि वास्तव में इसका परीक्षण कैसे की जाएगी? – Petar

+1

हाय, यह थोड़ी देर हो गया है, लेकिन देखते हैं कि मैं इसे एक साथ फिर से प्राप्त कर सकता हूं: स्थान प्रबंधक के साथ आपको सिस्टम जीपीएस लोकेशन मैनेजर मिलता है जो आपके ऐप को स्थिति में बदलावों के बारे में सूचित करता है। दूसरी पंक्ति में आप एक नया स्थान प्रदाता जोड़ते हैं। चूंकि आप एक यूनिट परीक्षण चलाएंगे, आपके पास पंजीकृत कोई अन्य स्थान प्रदाता नहीं होगा। जहां मैंने "// अपना परीक्षण सेट अप करें" टिप्पणी चिह्नित की है, आप उन घटकों को निष्क्रिय कर सकते हैं जिन्हें आप परीक्षण करना चाहते हैं, जो स्थान प्रबंधक से स्थितियों में परिवर्तनों को सुनना चाहिए। – Mallox

+0

उसके बाद आप स्थान प्रबंधक और आपके कोड पर एक नया स्थान भेजते हैं जिसे आप परीक्षण करना चाहते हैं, उस जानकारी के साथ कुछ करना चाहिए, ताकि यदि आप सही काम करते हैं तो आप बाद में जांच सकते हैं। अंत में आप परीक्षण प्रदाता को हटाना चाहते हैं, ताकि परीक्षण के लिए कई स्थान प्रदाता न हों, यदि आप अन्य परीक्षण लिखते हैं। (भले ही जूनिट शायद इसे ठीक से साफ कर दे) – Mallox

0

मेरा सुझाव है कि आप परीक्षा लिखते हैं जो श्रोता वर्ग को स्थान वस्तु भेज रहा है जिसे आप परीक्षण करना चाहते हैं। इस बात को ध्यान में रखते हुए आपको कुछ सहायक तरीकों की आवश्यकता होगी जो स्थान वस्तुओं का उत्पादन करने में सक्षम होंगे।

उदा .:

सबसे पहले आप तय निर्देशांक (न्यूयॉर्क जैसे केंद्र) के साथ एक स्थान भेजें।

// परीक्षण करता है, तो सब कुछ ठीक

है से आप एक समन्वय है जहाँ से 100 मीटर Appart पहले समन्वय है भेजें। आप कार्य के साथ ऐसा कर सकते हैं मैं हाल ही में लागू: https://stackoverflow.com/a/17545955/322791

// परीक्षण करता है, तो सब कुछ ठीक

यह आम बात है कि जीपीएस तरीकों समय से जुड़े हुए हैं है। मेरा सुझाव है कि आप श्रोता वर्ग पर विधि getNow() को लागू करें और जब भी आपको वर्तमान समय की आवश्यकता हो, इसे कॉल करें।

long getNow() { 
    if (isUnitTesting) { 
     return unitTestTime; 
    } else { 
     System.getcurrenttimemillis(); 
    } 
} 

इकाई परीक्षण वातावरण में आप बस obj.isUnitTesting = सच और obj.unitTestTime किसी भी समय आप चाहते हैं करने के लिए सेट। उसके बाद आप श्रोता को पहला स्थान भेज सकते हैं, फिर आप समय (+ x सेकेंड) बदल सकते हैं और एक और स्थान भेज सकते हैं ...

इस तरह से अपने एप्लिकेशन का परीक्षण करना बहुत आसान होगा।

2

Mallox कोड के अलावा इस वास्तविक जीपीएस स्थान के अलावा कृत्रिम स्थान के लिए sulotion है:

public class GPSPollingServiceTest extends AndroidTestCase { 
private LocationManager locationManager; 

public void testGPS() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { 
    LocationManager locationManager = (LocationManager) this.getContext().getSystemService(Context.LOCATION_SERVICE); 
    List providers = locationManager.getAllProviders(); 
    if(!providers.contains(TEST_MOCK_GPS_LOCATION)) { 
     locationManager.addTestProvider(TEST_MOCK_GPS_LOCATION, false, false, false, false, false, false, false, Criteria.POWER_LOW, Criteria.ACCURACY_FINE); 
     locationManager.setTestProviderEnabled(TEST_MOCK_GPS_LOCATION, true); 
     // Set up your test 
     Location location = new Location(TEST_MOCK_GPS_LOCATION); 
     location.setLatitude(34.1233400); 
     location.setLongitude(15.6777880); 
     location.setAccuracy(7); 
     location.setTime(8); 
     location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos()); 

     locationManager.setTestProviderLocation(TEST_MOCK_GPS_LOCATION, location); 

     Method locationJellyBeanFixMethod = Location.class.getMethod("makeComplete"); 
     if (locationJellyBeanFixMethod != null) { 
      locationJellyBeanFixMethod.invoke(location); 
     } 
    } else { 
     // Check if your listener reacted the right way 
     locationManager.removeTestProvider(TEST_MOCK_GPS_LOCATION); 
    } 
} 

}: TEST_MOCK_GPS_LOCATION एक स्ट्रिंग

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Location location = null; 

    List providers = lm.getAllProviders(); 
    for (Object provider : providers) { 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 
     Location loc = lm.getLastKnownLocation((String) provider); 
     if (provider.equals(TEST_MOCK_GPS_LOCATION)) { 
      mLastLocation = loc; 
     } 
    } 

परीक्षण वर्ग में यह है

उम्मीद है कि यह आपकी मदद करेगा

0

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

संपादित करें: यह डिफ़ॉल्ट एंड्रॉइड एमुलेटर है जिसके बारे में मैं बात कर रहा हूं।

संबंधित मुद्दे