Я использую Wake Lock API в своем PWA Vue.js, чтобы предотвратить переход экрана в спящий режим.
Я запрашиваю блокировку пробуждения с помощью:
wakelock = navigator.wakeLock.request('screen');
Позже я выпускаю блокировку Wake с:
this.wakeLock.release();
Я храню свой объект Wake Lock (wakelocksentinel) в Pinia, чтобы убедиться, что я смогу получить его, даже если приложение отправлено на фон, а затем возвращается на передний план. < /p>
import { defineStore } from 'pinia';
export const useWakeLockStore = defineStore('wakeLock', {
state: () => ({
wakeLock: null,
}),
actions: {
async requestWakeLock() {
if ('wakeLock' in navigator) {
try {
const lock = await navigator.wakeLock.request('screen');
this.$patch({ wakeLock: lock });
alert('Screen wake lock acquired');
alert(`wakeLock: ${this.wakeLock}`);
} catch (err) {
alert(`Failed to acquire wake lock: ${err.message}`);
}
} else {
alert('Wake Lock API is not supported in this browser');
}
},
async releaseWakeLock() {
alert(`wakeLock: ${this.wakeLock}`);
if (this.wakeLock !== null) {
try {
this.wakeLock.release().catch((error) => {
alert('Failed to release wake lock on page unload:', error);
});
this.wakeLock.active = false;
this.$patch({ wakeLock: null });
alert('Wake lock released');
} catch (err) {
alert(`Failed to release wake lock: ${err.message}`);
}
} else {
alert(`Wake lock released`);
}
},
resetNavigatorWakelock() {
if (this.wakeLock !== null) {
alert(`wakeLock: ${this.wakeLock}`);
try {
// Attempt to release the existing wake lock
this.wakeLock.release();
this.$patch({ wakeLock: null });
alert('WackLock has been released successfully.');
} catch (err) {
alert(`Failed to release existing wake lock: ${err.message}`);
}
} else {
alert('No active wake lock to release.');
}
}
},
persist: true,
});
Это работает так, как ожидалось.
Однако, когда я использую сервисного работника для обработки события щелчка уведомления, вернитесь на страницу (с помощью клиента .navigate), а затем попытаюсь снять блокировку пробуждения, я могу получить объект WakeLockSentinel и вызвать Release() без каких-либо ошибок, но экран не возвращается в спящий режим, как ожидалось.
Еще одно странное поведение, которое я заметил, заключается в том, что после вызова Release() переменная WakeLock становится нулевым, что указывает на то, что оно было успешно удалено. Все должно быть в порядке...
Я подозреваю, что проблема возникает после обработки события щелчка уведомления в сервис-воркере с помощью:
// Navigate to the app and release the wake lock
});```
Is this a known issue with the Wake Lock API or an Android-specific bug? Are there any workarounds to ensure the screen returns to sleep mode after releasing the wake lock in this scenario?
Any insights or suggestions would be greatly appreciated.
I have tried several approaches to request and release the wake lock, including:
-Handling the wake lock directly inside the page.
-Using a utility function to manage it.
-Storing the wakeLockSentinel object in Pinia.
-Avoiding client.navigate inside the service worker and instead using a goBack method to return to the page without reloading it.
-Clearing storage using:
```localStorage.clear();
sessionStorage.clear();```
to prevent any hidden wake lock instances.
-Using adb shell dumpsys power to debug
Despite all these attempts, the issue persists. The code says that the "wakelockSentinel" has been released.
What's strange is that I am successfully releasing the correct wake lock "wakelockSentinel" instance, but the screen still remains awake.
Any ideas on how to resolve this?
Подробнее здесь: https://stackoverflow.com/questions/793 ... on-click-i
Проблема с Wake Lock API, который не отключается после щелчка уведомления сервисного работника в Vue.js PWA на устройств ⇐ Android
Форум для тех, кто программирует под Android
1737963855
Anonymous
Я использую Wake Lock API в своем PWA Vue.js, чтобы предотвратить переход экрана в спящий режим.
Я запрашиваю блокировку пробуждения с помощью:
wakelock = navigator.wakeLock.request('screen');
Позже я выпускаю блокировку Wake с:
this.wakeLock.release();
Я храню свой объект Wake Lock (wakelocksentinel) в Pinia, чтобы убедиться, что я смогу получить его, даже если приложение отправлено на фон, а затем возвращается на передний план. < /p>
import { defineStore } from 'pinia';
export const useWakeLockStore = defineStore('wakeLock', {
state: () => ({
wakeLock: null,
}),
actions: {
async requestWakeLock() {
if ('wakeLock' in navigator) {
try {
const lock = await navigator.wakeLock.request('screen');
this.$patch({ wakeLock: lock });
alert('Screen wake lock acquired');
alert(`wakeLock: ${this.wakeLock}`);
} catch (err) {
alert(`Failed to acquire wake lock: ${err.message}`);
}
} else {
alert('Wake Lock API is not supported in this browser');
}
},
async releaseWakeLock() {
alert(`wakeLock: ${this.wakeLock}`);
if (this.wakeLock !== null) {
try {
this.wakeLock.release().catch((error) => {
alert('Failed to release wake lock on page unload:', error);
});
this.wakeLock.active = false;
this.$patch({ wakeLock: null });
alert('Wake lock released');
} catch (err) {
alert(`Failed to release wake lock: ${err.message}`);
}
} else {
alert(`Wake lock released`);
}
},
resetNavigatorWakelock() {
if (this.wakeLock !== null) {
alert(`wakeLock: ${this.wakeLock}`);
try {
// Attempt to release the existing wake lock
this.wakeLock.release();
this.$patch({ wakeLock: null });
alert('WackLock has been released successfully.');
} catch (err) {
alert(`Failed to release existing wake lock: ${err.message}`);
}
} else {
alert('No active wake lock to release.');
}
}
},
persist: true,
});
Это работает так, как ожидалось.
Однако, когда я использую сервисного работника для обработки события щелчка уведомления, вернитесь на страницу (с помощью клиента .navigate), а затем попытаюсь снять блокировку пробуждения, я могу получить объект WakeLockSentinel и вызвать Release() без каких-либо ошибок, но экран не возвращается в спящий режим, как ожидалось.
Еще одно странное поведение, которое я заметил, заключается в том, что после вызова Release() переменная WakeLock становится нулевым, что указывает на то, что оно было успешно удалено. Все должно быть в порядке...
Я подозреваю, что проблема возникает после обработки события щелчка уведомления в сервис-воркере с помощью:
// Navigate to the app and release the wake lock
});```
Is this a known issue with the Wake Lock API or an Android-specific bug? Are there any workarounds to ensure the screen returns to sleep mode after releasing the wake lock in this scenario?
Any insights or suggestions would be greatly appreciated.
I have tried several approaches to request and release the wake lock, including:
-Handling the wake lock directly inside the page.
-Using a utility function to manage it.
-Storing the wakeLockSentinel object in Pinia.
-Avoiding client.navigate inside the service worker and instead using a goBack method to return to the page without reloading it.
-Clearing storage using:
```localStorage.clear();
sessionStorage.clear();```
to prevent any hidden wake lock instances.
-Using adb shell dumpsys power to debug
Despite all these attempts, the issue persists. The code says that the "wakelockSentinel" has been released.
What's strange is that I am successfully releasing the correct wake lock "wakelockSentinel" instance, but the screen still remains awake.
Any ideas on how to resolve this?
Подробнее здесь: [url]https://stackoverflow.com/questions/79390019/issue-with-wake-lock-api-not-releasing-after-service-worker-notification-click-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия