java - एंड्रॉइड पर एक इरादे के माध्यम से Google मानचित्र निर्देशों को लॉन्च करना




android google-maps (8)

मेरे ऐप को ए से बी से Google मानचित्र दिशानिर्देश दिखाने की ज़रूरत है, लेकिन मैं Google मानचित्र को अपने एप्लिकेशन में नहीं रखना चाहता - इसके बजाय, मैं इसे एक इरादे का उपयोग करके लॉन्च करना चाहता हूं। क्या यह संभव है? यदि हां, तो कैसे?


आप इस तरह कुछ उपयोग कर सकते हैं:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
    Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);

वर्तमान स्थान से नेविगेशन शुरू करने के लिए, saddr पैरामीटर और मान को हटा दें।

आप अक्षांश और देशांतर के बजाय वास्तविक सड़क पते का उपयोग कर सकते हैं। हालांकि यह उपयोगकर्ता को ब्राउज़र या Google मानचित्र के माध्यम से इसे खोलने के बीच चुनने के लिए एक संवाद देगा।

यह Google मानचित्र को नेविगेशन मोड में सीधे आग लगा देगा:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
    Uri.parse("google.navigation:q=an+address+city"));

अद्यतन करें

मई 2017 में Google ने सार्वभौमिक, क्रॉस-प्लेटफ़ॉर्म Google मानचित्र URL के लिए नया एपीआई लॉन्च किया:

https://developers.google.com/maps/documentation/urls/guide

आप नए एपीआई के साथ इरादों का भी उपयोग कर सकते हैं।


इसी से मेरा काम बना है:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://maps.google.co.in/maps?q=" + yourAddress));
if (intent.resolveActivity(getPackageManager()) != null) {
   startActivity(intent);
}

कई तरह के बिंदुओं के लिए, निम्नलिखित का भी उपयोग किया जा सकता है।

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
    Uri.parse("https://www.google.com/maps/dir/48.8276261,2.3350114/48.8476794,2.340595/48.8550395,2.300022/48.8417122,2.3028844"));
startActivity(intent);

निर्देशांक का पहला सेट आपका प्रारंभिक स्थान है। अगले सभी मार्ग बिंदु हैं, प्लॉट मार्ग के माध्यम से चला जाता है।

अंत में "अक्षांश, देशांतर" को जोड़कर बस बिंदुओं को जोड़ना जारी रखें। Google डॉक्स के अनुसार स्पष्ट रूप से 23 तरीकों की एक सीमा है। सुनिश्चित नहीं है कि यह एंड्रॉइड पर भी लागू होता है।


ठीक है आप Intent.setClassName विधि का उपयोग करके अंतर्निहित एप्लिकेशन एंड्रॉइड मैप्स खोलने का प्रयास कर सकते हैं।

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.827500,-122.481670"));
i.setClassName("com.google.android.apps.maps",
    "com.google.android.maps.MapsActivity");
startActivity(i);

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

String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);

अधिक जानकारी के लिए, यह SO उत्तर देखें

नोट: यह उदाहरण एक नमूना फ़ाइल का उपयोग करता है जो (mar13 के रूप में) अभी भी ऑनलाइन है। अगर यह ऑफ़लाइन हो गया है, तो एक kml फ़ाइल ऑनलाइन खोजें और अपना यूआरएल बदलें


यदि आप वर्तमान दिशा से अक्षांश और देशांतर दिखाने में रुचि रखते हैं, तो आप इसका उपयोग कर सकते हैं:

दिशानिर्देश हमेशा उपयोगकर्ताओं के वर्तमान स्थान से दिए जाते हैं।

निम्न क्वेरी आपको ऐसा करने में मदद करेगी। आप गंतव्य अक्षांश और देशांतर यहां पारित कर सकते हैं:

google.navigation:q=latitude,longitude

उपरोक्त का प्रयोग करें:

Uri gmmIntentUri = Uri.parse("google.navigation:q=latitude,longitude");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

या यदि आप स्थान के माध्यम से दिखाना चाहते हैं, तो इसका उपयोग करें:

google.navigation:q=a+street+address

यहां अधिक जानकारी: एंड्रॉइड के लिए Google मानचित्र इरादों


यह एक छोटा सा विषय है क्योंकि आपने "दिशानिर्देश" मांगे हैं, लेकिन आप एंड्रॉइड दस्तावेज़ीकरण में वर्णित जियो यूआरआई योजना का भी उपयोग कर सकते हैं:

http://developer.android.com/guide/appendix/g-app-intents.html

"भौगोलिक अक्षांश, देशांतर" का उपयोग करने में समस्या यह है कि Google मानचित्र केवल आपके बिंदु पर केंद्रित है, बिना किसी पिन या लेबल के।

यह काफी उलझन में है, खासकर अगर आपको एक सटीक जगह पर इंगित करने की आवश्यकता है या / और निर्देशों के लिए पूछना है।

यदि आप अपने भूगर्भ को लेबल करने के लिए क्वेरी पैरामीटर "भू: लैट, लोन? Q = name" का उपयोग करते हैं, तो यह खोज के लिए क्वेरी का उपयोग करता है और लेट / लॉन पैरामीटर को खारिज कर देता है।

मुझे लेट / लॉन के साथ मानचित्र को केन्द्रित करने का एक तरीका मिला और एक कस्टम लेबल के साथ एक पिन प्रदर्शित करना, निर्देशों या किसी अन्य कार्रवाई के लिए पूछते समय प्रदर्शित करना और उपयोगी होना बहुत अच्छा है:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);

नोट (@TheNail द्वारा): मानचित्र v.7 में काम नहीं कर रहा है (लेखन के समय नवीनतम संस्करण)। समन्वय को अनदेखा कर देगा और किसी ऑब्जेक्ट को कोष्ठक के बीच दिए गए नाम के साथ खोज करेगा। स्थान के साथ Google मानचित्र 7.0.0 के लिए भी इरादा देखें


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

  • कार्य
  • उरी

कार्रवाई के लिए हम Intent.ACTION_VIEW उपयोग कर सकते हैं और उरी के लिए हमें इसे बनाना चाहिए, नीचे मैंने गतिविधि बनाने, निर्माण करने, शुरू करने के लिए नमूना कोड संलग्न किया है।

 String addressString = "1600 Amphitheatre Parkway, CA";

    /*
    Build the uri 
     */
    Uri.Builder builder = new Uri.Builder();
    builder.scheme("geo")
            .path("0,0")
            .query(addressString);
    Uri addressUri = builder.build();
    /*
    Intent to open the map
     */
    Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);

    /*
    verify if the devise can launch the map intent
     */
    if (intent.resolveActivity(getPackageManager()) != null) {
       /*
       launch the intent
        */
        startActivity(intent);
    }




android-intent