From b434d3499b69372e9f5a0e80110a915d187467af Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Fri, 15 Dec 2023 15:41:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/legado/app/constant/PreferKey.kt | 1 + .../io/legado/app/service/AudioPlayService.kt | 30 ++++++++++++++++--- .../app/service/BaseReadAloudService.kt | 24 +++++++++++++-- .../java/io/legado/app/service/WebService.kt | 27 +++++++++++++++-- 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 97fa180ea514..918f87f37594 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -1,5 +1,6 @@ package io.legado.app.constant +@Suppress("ConstPropertyName") object PreferKey { const val language = "language" const val fontScale = "fontScale" diff --git a/app/src/main/java/io/legado/app/service/AudioPlayService.kt b/app/src/main/java/io/legado/app/service/AudioPlayService.kt index e90a52e3d471..0e720e822f77 100644 --- a/app/src/main/java/io/legado/app/service/AudioPlayService.kt +++ b/app/src/main/java/io/legado/app/service/AudioPlayService.kt @@ -8,6 +8,7 @@ import android.content.IntentFilter import android.graphics.Bitmap import android.graphics.BitmapFactory import android.media.AudioManager +import android.net.wifi.WifiManager.WIFI_MODE_FULL_HIGH_PERF import android.os.Build import android.os.Bundle import android.os.PowerManager @@ -42,6 +43,7 @@ import kotlinx.coroutines.Dispatchers.Main import splitties.init.appCtx import splitties.systemservices.audioManager import splitties.systemservices.powerManager +import splitties.systemservices.wifiManager @UnstableApi /** @@ -82,6 +84,12 @@ class AudioPlayService : BaseService(), this.setReferenceCounted(false) } } + private val wifiLock by lazy { + @Suppress("DEPRECATION") + wifiManager?.createWifiLock(WIFI_MODE_FULL_HIGH_PERF, "legado:AudioPlayService")?.apply { + setReferenceCounted(false) + } + } private val mFocusRequest: AudioFocusRequestCompat by lazy { MediaHelp.buildAudioFocusRequestCompat(this) } @@ -147,7 +155,10 @@ class AudioPlayService : BaseService(), override fun onDestroy() { super.onDestroy() - if (useWakeLock) wakeLock.release() + if (useWakeLock) { + wakeLock.release() + wifiLock?.release() + } isRun = false abandonFocus() exoPlayer.release() @@ -161,8 +172,12 @@ class AudioPlayService : BaseService(), /** * 播放音频 */ + @SuppressLint("WakelockTimeout") private fun play() { - if (useWakeLock) wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/) + if (useWakeLock) { + wakeLock.acquire() + wifiLock?.acquire() + } upNotification() if (!requestFocus()) { return @@ -197,7 +212,10 @@ class AudioPlayService : BaseService(), * 暂停播放 */ private fun pause(abandonFocus: Boolean = true) { - if (useWakeLock) wakeLock.release() + if (useWakeLock) { + wakeLock.release() + wifiLock?.release() + } try { pause = true if (abandonFocus) { @@ -218,8 +236,12 @@ class AudioPlayService : BaseService(), /** * 恢复播放 */ + @SuppressLint("WakelockTimeout") private fun resume() { - if (useWakeLock) wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/) + if (useWakeLock) { + wakeLock.acquire() + wifiLock?.acquire() + } try { pause = false if (url.isEmpty()) { diff --git a/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt b/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt index 56a28717cc63..0fc0d891736f 100644 --- a/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt +++ b/app/src/main/java/io/legado/app/service/BaseReadAloudService.kt @@ -9,6 +9,7 @@ import android.content.IntentFilter import android.graphics.Bitmap import android.graphics.BitmapFactory import android.media.AudioManager +import android.net.wifi.WifiManager import android.os.Bundle import android.os.PowerManager import android.support.v4.media.session.MediaSessionCompat @@ -37,6 +38,7 @@ import splitties.init.appCtx import splitties.systemservices.audioManager import splitties.systemservices.notificationManager import splitties.systemservices.powerManager +import splitties.systemservices.wifiManager /** * 朗读服务 @@ -70,6 +72,12 @@ abstract class BaseReadAloudService : BaseService(), this.setReferenceCounted(false) } } + private val wifiLock by lazy { + @Suppress("DEPRECATION") + wifiManager?.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "legado:AudioPlayService")?.apply { + setReferenceCounted(false) + } + } private val mFocusRequest: AudioFocusRequestCompat by lazy { MediaHelp.buildAudioFocusRequestCompat(this) } @@ -135,7 +143,10 @@ abstract class BaseReadAloudService : BaseService(), override fun onDestroy() { super.onDestroy() - if (useWakeLock) wakeLock.release() + if (useWakeLock) { + wakeLock.release() + wifiLock?.release() + } isRun = false pause = true abandonFocus() @@ -210,8 +221,12 @@ abstract class BaseReadAloudService : BaseService(), } } + @SuppressLint("WakelockTimeout") open fun play() { - if (useWakeLock) wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/) + if (useWakeLock) { + wakeLock.acquire() + wifiLock?.acquire() + } isRun = true pause = false needResumeOnAudioFocusGain = false @@ -223,7 +238,10 @@ abstract class BaseReadAloudService : BaseService(), @CallSuper open fun pauseReadAloud(abandonFocus: Boolean = true) { - if (useWakeLock) wakeLock.release() + if (useWakeLock) { + wakeLock.release() + wifiLock?.release() + } pause = true if (abandonFocus) { abandonFocus() diff --git a/app/src/main/java/io/legado/app/service/WebService.kt b/app/src/main/java/io/legado/app/service/WebService.kt index 679074e75348..56986bc32118 100644 --- a/app/src/main/java/io/legado/app/service/WebService.kt +++ b/app/src/main/java/io/legado/app/service/WebService.kt @@ -3,6 +3,7 @@ package io.legado.app.service import android.annotation.SuppressLint import android.content.Context import android.content.Intent +import android.net.wifi.WifiManager import android.os.Build import android.os.PowerManager import androidx.core.app.NotificationCompat @@ -19,6 +20,7 @@ import io.legado.app.web.HttpServer import io.legado.app.web.WebSocketServer import splitties.init.appCtx import splitties.systemservices.powerManager +import splitties.systemservices.wifiManager import java.io.IOException class WebService : BaseService() { @@ -49,6 +51,13 @@ class WebService : BaseService() { setReferenceCounted(false) } } + private val wifiLock by lazy { + @Suppress("DEPRECATION") + wifiManager?.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "legado:AudioPlayService") + ?.apply { + setReferenceCounted(false) + } + } private var httpServer: HttpServer? = null private var webSocketServer: WebSocketServer? = null private var notificationContent = appCtx.getString(R.string.service_starting) @@ -56,9 +65,13 @@ class WebService : BaseService() { NetworkChangedListener(this) } + @SuppressLint("WakelockTimeout") override fun onCreate() { super.onCreate() - if (useWakeLock) wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/) + if (useWakeLock) { + wakeLock.acquire() + wifiLock?.acquire() + } isRun = true upTile(true) networkChangedListener.register() @@ -77,11 +90,16 @@ class WebService : BaseService() { } } + @SuppressLint("WakelockTimeout") override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { when (intent?.action) { IntentAction.stop -> stopSelf() "copyHostAddress" -> sendToClip(hostAddress) - "serve" -> if (useWakeLock) wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/) + "serve" -> if (useWakeLock) { + wakeLock.acquire() + wifiLock?.acquire() + } + else -> upWebServer() } return super.onStartCommand(intent, flags, startId) @@ -89,7 +107,10 @@ class WebService : BaseService() { override fun onDestroy() { super.onDestroy() - if (useWakeLock) wakeLock.release() + if (useWakeLock) { + wakeLock.release() + wifiLock?.release() + } networkChangedListener.unRegister() isRun = false if (httpServer?.isAlive == true) {