Проблема с Wake Lock API, который не отключается после щелчка уведомления сервисного работника в Vue.js PWA на устройствAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с Wake Lock API, который не отключается после щелчка уведомления сервисного работника в Vue.js PWA на устройств

Сообщение 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?


Подробнее здесь: https://stackoverflow.com/questions/793 ... on-click-i
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение