Краткое резюме после обсуждения и ответы:
используя EXPO SDK вы не можете получить местоположение устройства без предоставления FINE_LOCATION в Android. FINE_LOCATION - единственный метод для определения местоположения, поэтому вы не можете получить hardware.network.location. Это означает: с android> 6 вы не можете получить текущее местоположение, используя WIFI/мобильные сети, вы должны включить Location.
Обсуждение github на выставке: https://github.com/expo/expo/issues/1339
Начальная проблема:
Я работаю над собственным приложением реакции, используя expo и response-native-карты, и мне нужно получить широту и долготу текущей позиции пользователя.
Я использую Navigation.geolocation API для этого
с включенным GPS у меня нет проблем, но мне нужно получить текущее положение без GPS, основываясь на провайдере сети.
Проблема в том, что когда приложение работает с expo на androiod> 6, я получаю эту ошибку:
21:50:53: Завершено сборка JavaScript-пакета за 449 мс 21:50:55: Службы определения местоположения отключены - node_modules\реагировать-native\Libraries\BatchedBridge\NativeModules.js: 80: 57 in - node_modules\реагировать-native\Libraries\BatchedBridge\MessageQueue.js: 347: 19 в __invokeCallback -... еще 4 стековых фрейма из внутренних компонентов фреймворка
В IO и Android <= 5 это прекрасно работает.
Вот код компонента:
class MyComponent extends Component {
componentWillMount = () => {
this.getCurrentLocation();
}
getCurrentLocation = () =>
navigator.geolocation.getCurrentPosition(
(position) => {
let currentUserPosition = position.coords;
alert(JSON.stringify(currentUserPosition));
},
(error) => {
console.log(error);
},
{
enableHighAccuracy: false,
timeout: 20000,
maximumAge: 0,
distanceFilter: 10
}
);
}
И это мои зависимости package.json:
"dependencies": {
"expo": "23.0.4",
"native-base": "^2.3.5",
"react": "16.0.0",
"react-native": "0.50.4",
"react-native-extend-indicator": "^0.1.2",
"react-native-maps": "^0.19.0",
"react-native-maps-directions": "^1.3.0",
"react-native-router-flux": "4.0.0-beta.21",
"react-navigation": "1.0.0-beta.21",
"react-navigation-redux-debouncer": "^0.0.2",
"react-redux": "^5.0.6",
"redux": "^3.7.2",
}
Я ожидаю, что navigator.geolocation получит местоположение на основе сетевого провайдера в этой ситуации (без gps), в спецификации сказано, что..
я также попробовал с API геолокации expo (попробовал этот пример: https://snack.expo.io/@schazers/expo-map-and-location-example), и с выключенным GPS я не могу получить свое местоположение.,
так.. есть ли способ добиться того, чего я хочу? я что-то упустил?
РЕДАКТИРОВАТЬ (EXPO CONTRIBUTOR ANSWER):
Я опубликовал то же самое на выставке github (https://github.com/expo/expo/issues/1339), по их мнению, невозможно получить текущую позицию с помощью navigator.geolocation без какого-либо уровня местоположения, включенного в Android устройство... так что... единственное, что может случиться, это то, что в версиях Android старше 5 по умолчанию включено местоположение, и вы можете включить только GPS, а в версиях 6 и выше вы должны указать уровень местоположения.
есть идеи?
РЕДАКТИРОВАТЬ 2 (ВАЖНО!):
Я подтвердил это:
это настройки безопасности устройства Android 6, по умолчанию оно использует GPS, я думаю, что Android 5 или ниже не делает, так что вот в чем дело... когда я использую второй вариант, он получает мне местоположение!
Дело в том, что принуждение пользователя к включению Location похоже на "эй, используй свой GPS!", и есть много приложений, которые дают вам приблизительную позицию без включения Location (как, например, Uber), поэтому вопрос в том, Есть ли способ, что ТОЛЬКО с помощью Wi-Fi получить местоположение с этим API?