2012-09-14 15 views
8

यहां एक अजीब समस्या है: मेरा ऐप आईओएस (5.1 और 6 दोनों) में निर्मित मैप्स को कॉल करने में सक्षम होना चाहिए। यह पता चला है कि यह आईओएस 6 के तहत ठीक काम करता है लेकिन आईओएस 5.1 के तहत नहीं। आईओएस 6 में नक्शे बुलाए जाते हैं और सैडर से डैडर के दिशानिर्देशों का पता लगाया जाता है लेकिन जब मैं आईओएस 5 में हूं, तो मैप्स ऐप को बुलाया जाता है लेकिन डैडर पर सिर्फ एक पिन लगाया जाता है। किसी अज्ञात कारण के लिए प्रारंभिक निर्देशांक (saddr) नहीं दिख रहे हैं और कोई दिशा नहीं मिली है।अपने ऐप के अंदर से दिशानिर्देशों के लिए मानचित्र पर कॉल करें - आईओएस 5 आईओएस 6

addr = [NSString stringWithFormat: @"maps://saddr=%f,%f&daddr=%f,%f", newLocation.coordinate.latitude, newLocation.coordinate.longitude, oldLatitude, oldLongitude]; 
NSURL *url = [NSURL URLWithString:addr]; 
[[UIApplication sharedApplication] openURL:url]; 

मैं परिवर्तन URL को "http://maps.google.com/something" लेकिन यह बजाय सफारी नक्शे एप्लिकेशन में बनाया कॉल की कोशिश की है:

यहाँ मेरी कोड है। मैंने देखा है कि यूआरएल में चर सही ढंग से पारित किए जा रहे हैं।

कोई विचार?

अग्रिम धन्यवाद!

+0

वस्तुतः समान प्रश्न [इस पुराने व्यक्ति के लिए] (http://stackoverflow.com/q/576768/119114), सिवाय इसके कि प्रारंभ पता दूसरे प्रश्न में वर्तमान स्थान है (वास्तव में समस्या को वास्तव में नहीं बदलता है)। – Nate

उत्तर

35

मुझे एक ही समस्या थी और मुझे इस तथ्य से निपटने के लिए कुछ सशर्त ओएस कोड बनाना पड़ा कि Google मानचित्र एप्लिकेशन को हटा दिया गया है। नई MKMapItem Reference

//first create latitude longitude object 
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude,longitude); 

//create MKMapItem out of coordinates 
MKPlacemark* placeMark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil]; 
MKMapItem* destination = [[MKMapItem alloc] initWithPlacemark:placeMark]; 

if([destination respondsToSelector:@selector(openInMapsWithLaunchOptions:)]) 
{ 
    //using iOS6 native maps app 
    [destination openInMapsWithLaunchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving}];   
} 
else 
{ 
    //using iOS 5 which has the Google Maps application 
    NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=Current+Location&daddr=%f,%f", latitude, longitude]; 
    [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]]; 
} 

[placeMark release]; 
[destination release]; 

से चलने की दिशाएं प्राप्त करने के लिए:

  1. IOS 6 नक्शे के लिए - आप MKLaunchOptionsDirectionsModeWalking के बजाय MKLaunchOptionsDirectionsModeDriving
  2. गूगल के नक्शे के लिए सेट कर सकते हैं - यूआरएल को &dirflg=w जोड़ें।

मुझे लगता है कि आईओएस 6 में openInMapsWithLaunchOptions का उपयोग करना बेहतर है क्योंकि यह आपको नक्शा एप्लिकेशन का जवाब देने के तरीके पर पूर्ण नियंत्रण देता है।

+1

मदद साथी के लिए धन्यवाद! मैं आपकी सलाह का पालन करता हूं और openInMapsWithLaunchOptions का उपयोग करता हूं और यह पूरी तरह से काम करता है। मैं उपयोग की जाने वाली एकमात्र चाल एनएसएसटींग * url = [NSString stringWithFormat: @ "http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f" के अंदर पैरामीटर के रूप में वर्तमान स्थान को पार कर रही थी। , वर्तमान अक्षांश, वर्तमान लम्बाई, अक्षांश, देशांतर]; क्योंकि मैं काम करने के लिए वर्तमान + स्थान सिंटैक्स नहीं मिल सका। शायद आईओएस 5.1.1 में सैंडबॉक्सिंग के बारे में कुछ करना है। – lsp

+0

@lsp, 'वर्तमान + स्थान' का उपयोग करने वाले मुद्दों पर मेरे उत्तर [इस बहुत पुराने प्रश्न पर] चर्चा की गई है (http://stackoverflow.com/a/964131/119114), और टिप्पणियां इसका जवाब देती हैं। – Nate

+0

मैं नक्शा दृश्य को पूर्ण स्क्रीन को कवर करने के लिए नहीं चाहता, यह मेरी स्क्रीन का केवल आधा प्रदर्शित करना संभव है। – Arun

0

आप MKPlacemark और MKMapItem मानचित्र ऐप्लिकेशन लॉन्च करने के लिए उपयोग कर सकते हैं के साथ दोनों एक समन्वय और मैप पिन पर एक शीर्षक:

NSString *pinTitle; 
CLLocationCoordinate2D coordinate; 

MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:@{(id)kABPersonAddressStreetKey: pinTitle}]; 
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark]; 

if ([mapItem respondsToSelector:@selector(openInMapsWithLaunchOptions:)]) 
{ 
    [mapItem openInMapsWithLaunchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving}]; 
} 
else 
{ 
    // Google Maps fallback 
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?daddr=%f,%f&saddr=Current+Location", locationItem.coordinate.latitude, locationItem.coordinate.longitude]; 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]]; 
} 

ध्यान दें कि आप AddressBook.framework के खिलाफ लिंक और भी #import <AddressBook/AddressBook.h> जोड़ने की आवश्यकता होगी kABPersonAddressStreetKey निरंतर उपयोग करने के लिए कहीं भी अपने कोड में।

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