Skip to content

Commit 1e33c5f

Browse files
committed
feat(audio): 添加音频播放功能支持
- 新增 AudioPlayerUtil 工具类,支持 Assets、本地文件和网络音频播放 - 在 ASJavascriptInterfaceAsync 中实现 audioPlayFromFile 和 audioStop 方法 - 扩展 CallMethod 类,增加 audioPlayFromFile 和 audioStop 常量- 更新 OverlayBasic 示例,恢复注释掉的测试代码逻辑 - 移除 OverlayBasic 中的 download 方法实现 - 添加音频播放相关的完整回调接口和状态管理 - 支持相对音量和绝对音量控制模式 - 实现播放完成后的系统音量自动恢复功能 - 提供详细的音频播放调试信息接口- 集成协程支持,优化异步播放体验
1 parent ff1ab06 commit 1e33c5f

File tree

4 files changed

+747
-30
lines changed

4 files changed

+747
-30
lines changed

assists-web/src/main/java/com/ven/assists/web/ASJavascriptInterfaceAsync.kt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ import java.nio.charset.StandardCharsets
6666
import java.util.concurrent.TimeUnit
6767
import androidx.core.net.toUri
6868
import com.blankj.utilcode.util.ActivityUtils
69+
import com.ven.assists.utils.AudioPlayerUtil
6970
import com.ven.assists.utils.FileDownloadUtil
71+
import kotlinx.coroutines.CompletableDeferred
7072

7173
class ASJavascriptInterfaceAsync(val webView: WebView) {
7274
var callIntercept: ((json: String) -> CallInterceptResult)? = null
@@ -117,6 +119,42 @@ class ASJavascriptInterfaceAsync(val webView: WebView) {
117119
val request = GsonUtils.fromJson<CallRequest<JsonObject>>(requestJson, object : TypeToken<CallRequest<JsonObject>>() {}.type)
118120
runCatching {
119121
val response = when (request.method) {
122+
CallMethod.audioStop -> {
123+
AudioPlayerUtil.stop()
124+
val response = request.createResponse(0, data = null)
125+
response
126+
}
127+
128+
CallMethod.audioPlayFromFile -> {
129+
val filePath = request.arguments?.get("filePath")?.asString ?: ""
130+
val volume = request.arguments?.get("volume")?.asFloat
131+
val useAbsoluteVolume = request.arguments?.get("useAbsoluteVolume")?.asBoolean ?: false
132+
AssistsService.instance?.let {
133+
val completableDeferred = CompletableDeferred<Exception?>()
134+
AudioPlayerUtil.playFromFile(
135+
it, filePath, volume = volume,
136+
useAbsoluteVolume = useAbsoluteVolume,
137+
listener = object : AudioPlayerUtil.PlayListener {
138+
override fun onError(error: String) {
139+
completableDeferred.complete(RuntimeException(error))
140+
}
141+
142+
override fun onCompletion() {
143+
completableDeferred.complete(null)
144+
}
145+
})
146+
val result = completableDeferred.await()
147+
val response = request.createResponse(
148+
if (result == null) 0 else -1,
149+
data = if (result == null) "播放完成" else "播放失败: ${result.message}"
150+
)
151+
response
152+
} ?: let {
153+
val response = request.createResponse(-1, data = "无障碍服务无效")
154+
response
155+
}
156+
}
157+
120158
CallMethod.download -> {
121159
val url = request.arguments?.get("url")?.asString ?: ""
122160
AssistsService.instance?.let {

assists-web/src/main/java/com/ven/assists/web/CallMethod.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,7 @@ object CallMethod {
6565
const val keepScreenOn = "keepScreenOn"
6666
const val clearKeepScreenOn = "clearKeepScreenOn"
6767
const val download = "download"
68+
const val audioPlayFromFile = "audioPlayFromFile"
69+
const val audioStop = "audioStop"
6870

6971
}

0 commit comments

Comments
 (0)