|
@@ -9,6 +9,7 @@ import android.content.IntentFilter
|
|
|
import android.graphics.BitmapFactory
|
|
import android.graphics.BitmapFactory
|
|
|
import android.media.AudioManager
|
|
import android.media.AudioManager
|
|
|
import android.os.Bundle
|
|
import android.os.Bundle
|
|
|
|
|
+import android.os.PowerManager
|
|
|
import android.support.v4.media.session.MediaSessionCompat
|
|
import android.support.v4.media.session.MediaSessionCompat
|
|
|
import android.support.v4.media.session.PlaybackStateCompat
|
|
import android.support.v4.media.session.PlaybackStateCompat
|
|
|
import androidx.annotation.CallSuper
|
|
import androidx.annotation.CallSuper
|
|
@@ -27,7 +28,9 @@ import io.legado.app.ui.book.read.ReadBookActivity
|
|
|
import io.legado.app.ui.book.read.page.entities.TextChapter
|
|
import io.legado.app.ui.book.read.page.entities.TextChapter
|
|
|
import io.legado.app.utils.*
|
|
import io.legado.app.utils.*
|
|
|
import kotlinx.coroutines.*
|
|
import kotlinx.coroutines.*
|
|
|
|
|
+import splitties.init.appCtx
|
|
|
import splitties.systemservices.audioManager
|
|
import splitties.systemservices.audioManager
|
|
|
|
|
+import splitties.systemservices.powerManager
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 朗读服务
|
|
* 朗读服务
|
|
@@ -51,8 +54,16 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
fun isPlay(): Boolean {
|
|
fun isPlay(): Boolean {
|
|
|
return isRun && !pause
|
|
return isRun && !pause
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private val useWakeLock = appCtx.getPrefBoolean(PreferKey.readAloudWakeLock, false)
|
|
|
|
|
+ private val wakeLock by lazy {
|
|
|
|
|
+ powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "legado:ReadAloudService")
|
|
|
|
|
+ .apply {
|
|
|
|
|
+ this.setReferenceCounted(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
private val mFocusRequest: AudioFocusRequestCompat by lazy {
|
|
private val mFocusRequest: AudioFocusRequestCompat by lazy {
|
|
|
MediaHelp.buildAudioFocusRequestCompat(this)
|
|
MediaHelp.buildAudioFocusRequestCompat(this)
|
|
|
}
|
|
}
|
|
@@ -102,6 +113,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
|
|
|
|
|
override fun onDestroy() {
|
|
override fun onDestroy() {
|
|
|
super.onDestroy()
|
|
super.onDestroy()
|
|
|
|
|
+ if (useWakeLock) wakeLock.release()
|
|
|
isRun = false
|
|
isRun = false
|
|
|
pause = true
|
|
pause = true
|
|
|
abandonFocus()
|
|
abandonFocus()
|
|
@@ -150,6 +162,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
open fun play() {
|
|
open fun play() {
|
|
|
|
|
+ if (useWakeLock) wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/)
|
|
|
isRun = true
|
|
isRun = true
|
|
|
pause = false
|
|
pause = false
|
|
|
needResumeOnAudioFocusGain = false
|
|
needResumeOnAudioFocusGain = false
|
|
@@ -161,6 +174,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|
|
|
|
|
|
|
@CallSuper
|
|
@CallSuper
|
|
|
open fun pauseReadAloud(abandonFocus: Boolean = true) {
|
|
open fun pauseReadAloud(abandonFocus: Boolean = true) {
|
|
|
|
|
+ if (useWakeLock) wakeLock.release()
|
|
|
pause = true
|
|
pause = true
|
|
|
if (abandonFocus) {
|
|
if (abandonFocus) {
|
|
|
abandonFocus()
|
|
abandonFocus()
|