可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to open google maps or maps in my react-native application, but when I run the app in my Iphone/simulator I receive the error "Don't know how to open URI:...".
What I am doing wrong?
My code:
openGps() {
var url = 'geo:37.484847,-122.148386'
this.openExternalApp(url)
}
openExternalApp(url) {
Linking.canOpenURL(url).then(supported => {
if (supported) {
Linking.openURL(url);
} else {
console.log('Don\'t know how to open URI: ' + url);
}
});
}
回答1:
To open url with custom label ios/android:
const scheme = Platform.select({ ios: 'maps:0,0?q=', android: 'geo:0,0?q=' });
const latLng = `${lat},${lng}`;
const label = 'Custom Label';
const url = Platform.select({
ios: `${scheme}${label}@${latLng}`,
android: `${scheme}${latLng}(${label})`
});
Linking.openURL(url);
回答2:
This is because iOS does not yet have support for geo:
yet as mentioned in this SO answer. What you can do is detect the OS and:
- use
geo:
on Android
- handle iOS differently. Possibly use
maps:
as it will open up Apple Maps, though I'm unsure how to properly send the coordinates to it. Or maybe append it to a google maps HTTP URL and open it in the browser.
For example, your openGps
function could look like this:
openGps = (lat, lng) => {
var scheme = Platform.OS === 'ios' ? 'maps:' : 'geo:';
var url = scheme + `${lat},${lng}`;
Linking.openURL(url);
}
回答3:
you can do like this:
Android:
<TouchableOpacity onPress={() => Linking.openURL('google.navigation:q=100+101')}>
where q
is the destination lat + long
IOS:
<TouchableOpacity onPress={() => Linking.openURL('maps://app?saddr=100+101&daddr=100+102')}>
where saddr
is start address and daddr
is destination address lat+long
回答4:
const latitude = "40.7127753";
const longitude = "-74.0059728";
const label = "New York, NY, USA";
const url = Platform.select({
ios: "maps:" + latitude + "," + longitude + "?q=" + label,
android: "geo:" + latitude + "," + longitude + "?q=" + label
});
Linking.openURL(url);
or with checking if there's a google map app on device and if not open the location in browser
const latitude = "40.7127753";
const longitude = "-74.0059728";
const label = "New York, NY, USA";
const url = Platform.select({
ios: "maps:" + latitude + "," + longitude + "?q=" + label,
android: "geo:" + latitude + "," + longitude + "?q=" + label
});
Linking.canOpenURL(url).then(supported => {
if (supported) {
return Linking.openURL(url);
} else {
browser_url =
"https://www.google.de/maps/@" +
latitude +
"," +
longitude +
"?q=" +
label;
return Linking.openURL(browser_url);
}
});
回答5:
Working on Android with an address using the following:
Linking.openURL('https://www.google.com/maps/search/?api=1&query=address');
Replace address
with your favourite address.
回答6:
To complement other answers, here's a snippet of adding a marker on Android:
const location = `${latitude},${longitude}`
const url = Platform.select({
ios: `maps:${location}`,
android: `geo:${location}?center=${location}&q=${location}&z=16`,
});
Linking.openURL(url);
If you want more details about Android and google maps, here's the link for the documentation:
https://developers.google.com/maps/documentation/urls/android-intents
回答7:
const url = Platform.select({
ios: `maps:0,0?q=${fullAddress}`,
android: `geo:0,0?q=${fullAddress}`,
})
Linking.openURL(url)