优化
This commit is contained in:
@@ -60,18 +60,18 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
private val mediaSessionCompat: MediaSessionCompat by lazy {
|
private val mediaSessionCompat: MediaSessionCompat by lazy {
|
||||||
MediaSessionCompat(this, "readAloud")
|
MediaSessionCompat(this, "readAloud")
|
||||||
}
|
}
|
||||||
private var audioFocusLossTransient = false
|
|
||||||
internal val contentList = arrayListOf<String>()
|
internal val contentList = arrayListOf<String>()
|
||||||
internal var nowSpeak: Int = 0
|
internal var nowSpeak: Int = 0
|
||||||
internal var readAloudNumber: Int = 0
|
internal var readAloudNumber: Int = 0
|
||||||
internal var textChapter: TextChapter? = null
|
internal var textChapter: TextChapter? = null
|
||||||
internal var pageIndex = 0
|
internal var pageIndex = 0
|
||||||
|
private var needResumeOnAudioFocusGain = false
|
||||||
private var dsJob: Job? = null
|
private var dsJob: Job? = null
|
||||||
|
|
||||||
private val broadcastReceiver = object : BroadcastReceiver() {
|
private val broadcastReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY == intent.action) {
|
if (AudioManager.ACTION_AUDIO_BECOMING_NOISY == intent.action) {
|
||||||
pauseReadAloud(true)
|
pauseReadAloud()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,7 +105,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
intent.getIntExtra("pageIndex", ReadBook.durPageIndex),
|
intent.getIntExtra("pageIndex", ReadBook.durPageIndex),
|
||||||
intent.getIntExtra("startPos", 0)
|
intent.getIntExtra("startPos", 0)
|
||||||
)
|
)
|
||||||
IntentAction.pause -> pauseReadAloud(true)
|
IntentAction.pause -> pauseReadAloud()
|
||||||
IntentAction.resume -> resumeReadAloud()
|
IntentAction.resume -> resumeReadAloud()
|
||||||
IntentAction.upTtsSpeechRate -> upSpeechRate(true)
|
IntentAction.upTtsSpeechRate -> upSpeechRate(true)
|
||||||
IntentAction.prevParagraph -> prevP()
|
IntentAction.prevParagraph -> prevP()
|
||||||
@@ -138,6 +138,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
open fun play() {
|
open fun play() {
|
||||||
isRun = true
|
isRun = true
|
||||||
pause = false
|
pause = false
|
||||||
|
needResumeOnAudioFocusGain = false
|
||||||
upNotification()
|
upNotification()
|
||||||
postEvent(EventBus.ALOUD_STATE, Status.PLAY)
|
postEvent(EventBus.ALOUD_STATE, Status.PLAY)
|
||||||
}
|
}
|
||||||
@@ -145,8 +146,8 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
abstract fun playStop()
|
abstract fun playStop()
|
||||||
|
|
||||||
@CallSuper
|
@CallSuper
|
||||||
open fun pauseReadAloud(pause: Boolean) {
|
open fun pauseReadAloud() {
|
||||||
BaseReadAloudService.pause = pause
|
pause = true
|
||||||
upNotification()
|
upNotification()
|
||||||
upMediaSessionPlaybackState(PlaybackStateCompat.STATE_PAUSED)
|
upMediaSessionPlaybackState(PlaybackStateCompat.STATE_PAUSED)
|
||||||
postEvent(EventBus.ALOUD_STATE, Status.PAUSE)
|
postEvent(EventBus.ALOUD_STATE, Status.PAUSE)
|
||||||
@@ -278,9 +279,7 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
override fun onAudioFocusChange(focusChange: Int) {
|
override fun onAudioFocusChange(focusChange: Int) {
|
||||||
when (focusChange) {
|
when (focusChange) {
|
||||||
AudioManager.AUDIOFOCUS_GAIN -> {
|
AudioManager.AUDIOFOCUS_GAIN -> {
|
||||||
|
if (needResumeOnAudioFocusGain) {
|
||||||
audioFocusLossTransient = false
|
|
||||||
if (!pause) {
|
|
||||||
AppLog.put("音频焦点获得,继续朗读")
|
AppLog.put("音频焦点获得,继续朗读")
|
||||||
resumeReadAloud()
|
resumeReadAloud()
|
||||||
} else {
|
} else {
|
||||||
@@ -289,14 +288,14 @@ abstract class BaseReadAloudService : BaseService(),
|
|||||||
}
|
}
|
||||||
AudioManager.AUDIOFOCUS_LOSS -> {
|
AudioManager.AUDIOFOCUS_LOSS -> {
|
||||||
AppLog.put("音频焦点丢失,暂停朗读")
|
AppLog.put("音频焦点丢失,暂停朗读")
|
||||||
if (audioFocusLossTransient) {
|
pauseReadAloud()
|
||||||
pauseReadAloud(true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
|
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
|
||||||
AppLog.put("音频焦点暂时丢失并会很快再次获得,暂停朗读")
|
AppLog.put("音频焦点暂时丢失并会很快再次获得,暂停朗读")
|
||||||
audioFocusLossTransient = true
|
if (!pause) {
|
||||||
if (!pause) pauseReadAloud(false)
|
needResumeOnAudioFocusGain = true
|
||||||
|
pauseReadAloud()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
|
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
|
||||||
// 短暂丢失焦点,这种情况是被其他应用申请了短暂的焦点希望其他声音能压低音量(或者关闭声音)凸显这个声音(比如短信提示音),
|
// 短暂丢失焦点,这种情况是被其他应用申请了短暂的焦点希望其他声音能压低音量(或者关闭声音)凸显这个声音(比如短信提示音),
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
|||||||
toastOnUi("js错误\n${it.localizedMessage}")
|
toastOnUi("js错误\n${it.localizedMessage}")
|
||||||
it.printOnDebug()
|
it.printOnDebug()
|
||||||
cancel()
|
cancel()
|
||||||
pauseReadAloud(true)
|
pauseReadAloud()
|
||||||
}
|
}
|
||||||
is SocketTimeoutException, is ConnectException -> {
|
is SocketTimeoutException, is ConnectException -> {
|
||||||
downloadErrorNo++
|
downloadErrorNo++
|
||||||
@@ -179,7 +179,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
|||||||
val msg = "tts超时或连接错误超过5次\n${it.localizedMessage}"
|
val msg = "tts超时或连接错误超过5次\n${it.localizedMessage}"
|
||||||
AppLog.put(msg, it)
|
AppLog.put(msg, it)
|
||||||
toastOnUi(msg)
|
toastOnUi(msg)
|
||||||
pauseReadAloud(true)
|
pauseReadAloud()
|
||||||
} else {
|
} else {
|
||||||
downloadAudio()
|
downloadAudio()
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ class HttpReadAloudService : BaseReadAloudService(),
|
|||||||
if (downloadErrorNo > 5) {
|
if (downloadErrorNo > 5) {
|
||||||
AppLog.put("TTS服务器连续5次错误,已暂停阅读。")
|
AppLog.put("TTS服务器连续5次错误,已暂停阅读。")
|
||||||
toastOnUi("TTS服务器连续5次错误,已暂停阅读。")
|
toastOnUi("TTS服务器连续5次错误,已暂停阅读。")
|
||||||
pauseReadAloud(true)
|
pauseReadAloud()
|
||||||
} else {
|
} else {
|
||||||
AppLog.put("TTS下载音频出错,使用无声音频代替。\n朗读文本:$content")
|
AppLog.put("TTS下载音频出错,使用无声音频代替。\n朗读文本:$content")
|
||||||
createSilentSound(fileName)
|
createSilentSound(fileName)
|
||||||
@@ -271,8 +271,8 @@ class HttpReadAloudService : BaseReadAloudService(),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun pauseReadAloud(pause: Boolean) {
|
override fun pauseReadAloud() {
|
||||||
super.pauseReadAloud(pause)
|
super.pauseReadAloud()
|
||||||
kotlin.runCatching {
|
kotlin.runCatching {
|
||||||
playIndexJob?.cancel()
|
playIndexJob?.cancel()
|
||||||
exoPlayer.pause()
|
exoPlayer.pause()
|
||||||
|
|||||||
@@ -121,8 +121,8 @@ class TTSReadAloudService : BaseReadAloudService(), TextToSpeech.OnInitListener
|
|||||||
/**
|
/**
|
||||||
* 暂停朗读
|
* 暂停朗读
|
||||||
*/
|
*/
|
||||||
override fun pauseReadAloud(pause: Boolean) {
|
override fun pauseReadAloud() {
|
||||||
super.pauseReadAloud(pause)
|
super.pauseReadAloud()
|
||||||
textToSpeech?.stop()
|
textToSpeech?.stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user