Открывать карты/карты Google в
Я пытаюсь открыть карты Google или карты в своем приложении, основанном на реакции, но когда я запускаю приложение в своем Iphone/simulator, я получаю сообщение об ошибке "Не знаю, как открыть URI:...".
Что я делаю неправильно?
Мой код:
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
Чтобы открыть URL с пользовательским ярлыком 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
Это потому, что iOS еще не поддерживает geo:
, как уже упоминалось в этом ответе SO. Что вы можете сделать, это определить ОС и:
- использовать
geo:
на Android
- обращаться с iOS по-разному. Возможно, используйте
maps:
, так как он откроет Apple Maps, хотя я не уверен, как правильно отправить ему координаты. Или добавьте его в URL-адрес Google Maps Google и откройте его в браузере.
Для примера ваша функция openGps
может выглядеть следующим образом:
openGps = (lat, lng) => {
var scheme = Platform.OS === 'ios' ? 'maps:' : 'geo:';
var url = scheme + '${lat},${lng}';
Linking.openURL(url);
}
Ответ 3
вы можете сделать вот так:
Android:
<TouchableOpacity onPress={() => Linking.openURL('google.navigation:q=100+101')}>
где q
- конечный лат + длинный
IOS:
<TouchableOpacity onPress={() => Linking.openURL('maps://app?saddr=100+101&daddr=100+102')}>
где saddr
- начальный адрес, а daddr
- адрес назначения 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);
или с проверкой, есть ли приложение на карте Google на устройстве, и если не открыть местоположение в браузере
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
Работа на Android с адресом с использованием следующего:
Linking.openURL('https://www.google.com/maps/search/?api=1&query=address');
Замените address
на ваш любимый адрес.
Ответ 6
Чтобы дополнить другие ответы, вот фрагмент добавления маркера на Android:
const location = '${latitude},${longitude}'
const url = Platform.select({
ios: 'maps:${location}',
android: 'geo:${location}?center=${location}&q=${location}&z=16',
});
Linking.openURL(url);
Если вам нужна более подробная информация об Android и картах Google, перейдите по ссылке на документацию:https://developers.google.com/maps/documentation/urls/android-intents