kunfei 4 роки тому
батько
коміт
2fa02ab6e0

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -4,6 +4,7 @@
     package="io.legado.app">
 
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

+ 8 - 0
app/src/main/java/io/legado/app/service/AudioPlayService.kt

@@ -9,6 +9,7 @@ import android.graphics.BitmapFactory
 import android.media.AudioManager
 import android.net.Uri
 import android.os.Build
+import android.os.PowerManager
 import android.support.v4.media.session.MediaSessionCompat
 import android.support.v4.media.session.PlaybackStateCompat
 import androidx.core.app.NotificationCompat
@@ -36,6 +37,7 @@ import io.legado.app.utils.*
 import kotlinx.coroutines.*
 import kotlinx.coroutines.Dispatchers.Main
 import splitties.systemservices.audioManager
+import splitties.systemservices.powerManager
 
 /**
  * 音频播放服务
@@ -61,6 +63,9 @@ class AudioPlayService : BaseService(),
             private set
     }
 
+    private val wakeLock by lazy {
+        powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "legado:webService")
+    }
     private val mFocusRequest: AudioFocusRequestCompat by lazy {
         MediaHelp.buildAudioFocusRequestCompat(this)
     }
@@ -82,8 +87,10 @@ class AudioPlayService : BaseService(),
     private var upPlayProgressJob: Job? = null
     private var playSpeed: Float = 1f
 
+    @SuppressLint("WakelockTimeout")
     override fun onCreate() {
         super.onCreate()
+        wakeLock.acquire()
         isRun = true
         upNotification()
         exoPlayer.addListener(this)
@@ -120,6 +127,7 @@ class AudioPlayService : BaseService(),
 
     override fun onDestroy() {
         super.onDestroy()
+        wakeLock.release()
         isRun = false
         abandonFocus()
         exoPlayer.release()

+ 8 - 0
app/src/main/java/io/legado/app/service/BaseReadAloudService.kt

@@ -8,6 +8,7 @@ import android.content.Intent
 import android.content.IntentFilter
 import android.graphics.BitmapFactory
 import android.media.AudioManager
+import android.os.PowerManager
 import android.support.v4.media.session.MediaSessionCompat
 import android.support.v4.media.session.PlaybackStateCompat
 import androidx.annotation.CallSuper
@@ -30,6 +31,7 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.isActive
 import kotlinx.coroutines.launch
 import splitties.systemservices.audioManager
+import splitties.systemservices.powerManager
 
 /**
  * 朗读服务
@@ -55,6 +57,9 @@ abstract class BaseReadAloudService : BaseService(),
         }
     }
 
+    private val wakeLock by lazy {
+        powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "legado:readAloud")
+    }
     private val mFocusRequest: AudioFocusRequestCompat by lazy {
         MediaHelp.buildAudioFocusRequestCompat(this)
     }
@@ -77,8 +82,10 @@ abstract class BaseReadAloudService : BaseService(),
         }
     }
 
+    @SuppressLint("WakelockTimeout")
     override fun onCreate() {
         super.onCreate()
+        wakeLock.acquire()
         isRun = true
         pause = false
         initMediaSession()
@@ -90,6 +97,7 @@ abstract class BaseReadAloudService : BaseService(),
 
     override fun onDestroy() {
         super.onDestroy()
+        wakeLock.release()
         isRun = false
         pause = true
         abandonFocus()

+ 9 - 0
app/src/main/java/io/legado/app/service/WebService.kt

@@ -1,8 +1,10 @@
 package io.legado.app.service
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.content.Intent
 import android.os.Build
+import android.os.PowerManager
 import androidx.core.app.NotificationCompat
 import io.legado.app.R
 import io.legado.app.base.BaseService
@@ -14,6 +16,7 @@ import io.legado.app.receiver.NetworkChangedListener
 import io.legado.app.utils.*
 import io.legado.app.web.HttpServer
 import io.legado.app.web.WebSocketServer
+import splitties.systemservices.powerManager
 
 import java.io.IOException
 
@@ -33,6 +36,9 @@ class WebService : BaseService() {
 
     }
 
+    private val wakeLock by lazy {
+        powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "legado:webService")
+    }
     private var httpServer: HttpServer? = null
     private var webSocketServer: WebSocketServer? = null
     private var notificationContent = ""
@@ -40,8 +46,10 @@ class WebService : BaseService() {
         NetworkChangedListener(this)
     }
 
+    @SuppressLint("WakelockTimeout")
     override fun onCreate() {
         super.onCreate()
+        wakeLock.acquire()
         isRun = true
         notificationContent = getString(R.string.service_starting)
         upNotification()
@@ -73,6 +81,7 @@ class WebService : BaseService() {
 
     override fun onDestroy() {
         super.onDestroy()
+        wakeLock.release()
         networkChangedListener.unRegister()
         isRun = false
         if (httpServer?.isAlive == true) {