API геолокации React-native, заголовок всегда равен нулю. Невозможно показать точное движение в реальном времени (androiAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 API геолокации React-native, заголовок всегда равен нулю. Невозможно показать точное движение в реальном времени (androi

Сообщение Anonymous »

Шокирует тот факт, что пакет React-native-geolocation не может отображать заголовок устройства Android в реальном времени, несмотря на то, что lat и lng обновляются в реальном времени, а устройство движется. Я воздерживаюсь от использования onLocationChange, который сам встроен в карты Google, потому что он добавляет синий круглый значок, который я не могу обойти. Я предпочитаю использовать свой собственный значок маркера. Я выполнил инструкцию на странице github, но заголовок все равно не обновляется. Я решил использовать датчики на устройстве только для использования двух моих устройств, и все они не имеют магнитометра. Мне нужно корректно выйти и справиться, если на устройстве нет магнитометра. Я пытался использовать гироскоп, но в моих устройствах его тоже нет. Вторая часть меня шокировала, потому что аппаратные модули доступны уже давно. Я снова занимаюсь исправлением геолокации или есть ли способ удалить синий значок, который поставляется с onLocationChange. В любом случае проверьте мой код и посмотрите, есть ли какие-либо пробелы.
React.useEffect(() => {
Geolocation.requestAuthorization(() => {});
if (!origin && !destination && !recordingMode) {
if (watchId !== null) {
Geolocation.clearWatch(watchId);
setWatchId(null);
}
const noSaveWatchId = Geolocation.watchPosition(
(position) => {
const {
latitude,
longitude,
altitude,
accuracy,
speed,
heading: geoHeading,
altitudeAccuracy,
} = position.coords;
setCurrentPosition({
coordinate: { latitude, longitude },
altitude: altitude as number,
timestamp: position.timestamp,
accuracy: accuracy,
speed: speed as number,
heading: heading || (geoHeading as number),
altitudeAccuracy: altitudeAccuracy as number,
isFromMockProvider: (position as any).mocked,
});
},
(error) => console.log(error),
{
enableHighAccuracy: true,
distanceFilter: 0,
interval: 5000,
fastestInterval: 2000,
}
);
setWatchId(noSaveWatchId);

return () => {
if (noSaveWatchId !== null) {
Geolocation.clearWatch(noSaveWatchId);
}
};
} else if (origin && destination && recordingMode) {
if (watchId !== null) {
Geolocation.clearWatch(watchId);
setWatchId(null);
}
const saveWatchId = Geolocation.watchPosition(
(position) => {
const {
latitude,
longitude,
altitude,
accuracy,
speed,
heading: geoHeading,
altitudeAccuracy,
} = position.coords;
const bearing: number = calculateBearing(
latitude,
longitude,
destination.latitude,
destination.longitude
);
setCurrentPosition({
coordinate: { latitude, longitude },
altitude: altitude as number,
timestamp: position.timestamp,
accuracy: accuracy,
speed: speed as number,
heading: heading || bearing || (geoHeading as number),
altitudeAccuracy: altitudeAccuracy as number,
isFromMockProvider: (position as any).mocked,
});
if (
state &&
state.location.lat !== latitude &&
state.location.lng !== longitude
// state.location.heading !== heading
) {
dispatch({
type: Types.SetLocation,
payload: {
lat: latitude ?? 0,
lng: longitude ?? 0,
heading: heading ?? 0,
},
});
} else return;
makeLogEntry({
latitude,
longitude,
heading: heading || undefined,
})
.then(() => console.log("Log made successfully"))
.catch((error) => console.log("Error making log entry:", error));
},
(error) => console.log(error),
{
enableHighAccuracy: true,
distanceFilter: 0,
interval: 5000,
fastestInterval: 2000,
}
);
setWatchId(saveWatchId);

return () => {
if (saveWatchId !== null) {
Geolocation.clearWatch(saveWatchId);
}
};
}
}, [origin, destination, recordingMode]);


Подробнее здесь: https://stackoverflow.com/questions/790 ... ealtime-ac
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»