Я пытаюсь получить правильную ориентацию своего веб-приложения. В iOS event.webkitCompassHeading работает очень хорошо, но в Android он либо не определен, либо возвращает NaN.
После поиска в Google я нашел код такого типа:< /p>
headingMio = Math.round(roundedAlpha + 85) % 360;
if (headingMio < 0) {
headingMio += 360;
}
Но в ландшафтном режиме это не работает. Как это исправить? Вот мой код:
let lastHeading = null;
let threshold = 5;
let threshold2 = 15;
document.addEventListener('click', async function requestOrientationPermission() {
if (typeof DeviceOrientationEvent.requestPermission === 'function') {
try {
const permissionState = await DeviceOrientationEvent.requestPermission();
if (permissionState === 'granted') {
console.log("Permesso concesso per l'orientamento del dispositivo.");
// Aggiungi l'event listener per l'orientamento
window.addEventListener('deviceorientation', handleDeviceOrientation);
document.removeEventListener('click', requestOrientationPermission);
} else {
console.log("Permesso negato per l'orientamento del dispositivo.");
}
} catch (error) {
console.error('Errore nel richiedere il permesso:', error);
}
} else {
window.addEventListener('deviceorientation', handleDeviceOrientation);
}
});
// Funzione che gestisce i dati di orientamento del dispositivo
function handleDeviceOrientation(event) {
roundedAlpha = Math.round(360 - event.alpha);
roundedBeta = Math.round(event.beta);
roundedGamma = Math.round(event.gamma);
headingMio = Math.round(event.webkitCompassHeading);
if (headingMio === undefined || isNaN(headingMio)) {
if (roundedBeta > 80 && roundedBeta < 105) {
//not worikng landscape
} else {
headingMio = Math.round(roundedAlpha + 85) % 360;
if (headingMio < 0) {
headingMio += 360;
}
}
}
const c = document.getElementById("orientation");
if (lastHeading === null || Math.abs(headingMio - lastHeading) > threshold) {
lastHeading = headingMio;
c.innerText = `Alpha (Z): ${roundedAlpha}, Beta (X - Inclinazione avanti/indietro): ${roundedBeta}, Gamma (Y - Inclinazione laterale): ${roundedGamma}, Nord Magnetico (Compass Heading): ${headingMio}`;
if (!isNaN(headingMio)) {
map.setHeading(parseInt(headingMio, 10));
}
}
c.innerText = `Alpha (Z): ${roundedAlpha}, Beta (X - Inclinazione avanti/indietro): ${roundedBeta}, Gamma (Y - Inclinazione laterale): ${roundedGamma}, Nord Magnetico (Compass Heading): ${headingMio}`;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... scape-mode
Неправильная ориентация на Android в ландшафтном режиме ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1732273207
Anonymous
Я пытаюсь получить правильную ориентацию своего веб-приложения. В iOS event.webkitCompassHeading работает очень хорошо, но в Android он либо не определен, либо возвращает NaN.
После поиска в Google я нашел код такого типа:< /p>
headingMio = Math.round(roundedAlpha + 85) % 360;
if (headingMio < 0) {
headingMio += 360;
}
Но в ландшафтном режиме это не работает. Как это исправить? Вот мой код:
let lastHeading = null;
let threshold = 5;
let threshold2 = 15;
document.addEventListener('click', async function requestOrientationPermission() {
if (typeof DeviceOrientationEvent.requestPermission === 'function') {
try {
const permissionState = await DeviceOrientationEvent.requestPermission();
if (permissionState === 'granted') {
console.log("Permesso concesso per l'orientamento del dispositivo.");
// Aggiungi l'event listener per l'orientamento
window.addEventListener('deviceorientation', handleDeviceOrientation);
document.removeEventListener('click', requestOrientationPermission);
} else {
console.log("Permesso negato per l'orientamento del dispositivo.");
}
} catch (error) {
console.error('Errore nel richiedere il permesso:', error);
}
} else {
window.addEventListener('deviceorientation', handleDeviceOrientation);
}
});
// Funzione che gestisce i dati di orientamento del dispositivo
function handleDeviceOrientation(event) {
roundedAlpha = Math.round(360 - event.alpha);
roundedBeta = Math.round(event.beta);
roundedGamma = Math.round(event.gamma);
headingMio = Math.round(event.webkitCompassHeading);
if (headingMio === undefined || isNaN(headingMio)) {
if (roundedBeta > 80 && roundedBeta < 105) {
//not worikng landscape
} else {
headingMio = Math.round(roundedAlpha + 85) % 360;
if (headingMio < 0) {
headingMio += 360;
}
}
}
const c = document.getElementById("orientation");
if (lastHeading === null || Math.abs(headingMio - lastHeading) > threshold) {
lastHeading = headingMio;
c.innerText = `Alpha (Z): ${roundedAlpha}, Beta (X - Inclinazione avanti/indietro): ${roundedBeta}, Gamma (Y - Inclinazione laterale): ${roundedGamma}, Nord Magnetico (Compass Heading): ${headingMio}`;
if (!isNaN(headingMio)) {
map.setHeading(parseInt(headingMio, 10));
}
}
c.innerText = `Alpha (Z): ${roundedAlpha}, Beta (X - Inclinazione avanti/indietro): ${roundedBeta}, Gamma (Y - Inclinazione laterale): ${roundedGamma}, Nord Magnetico (Compass Heading): ${headingMio}`;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79214727/incorrect-orientation-on-android-in-landscape-mode[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия