Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
7cfdc0cb32
  1. 7
      lib/modules/agent/controllers/agent_controller.dart
  2. 6
      lib/modules/agent/views/music_card.dart
  3. 24
      lib/modules/music/views/music_playlist_view.dart
  4. 9
      local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt
  5. 4
      local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicServicePlugin.kt
  6. 2
      local_plugins/music_service/lib/music_service.dart

7
lib/modules/agent/controllers/agent_controller.dart

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:ffi';
import 'dart:io'; import 'dart:io';
import 'package:amap_service/amap_service.dart'; import 'package:amap_service/amap_service.dart';
import 'package:deep_voice/core/utils/upload_oss.dart'; import 'package:deep_voice/core/utils/upload_oss.dart';
@ -35,7 +36,7 @@ class AgentController extends GetxController {
final _musiceManager = Get.find<MusicManager>(); final _musiceManager = Get.find<MusicManager>();
final _navigationManager = Get.find<NavigationManager>(); final _navigationManager = Get.find<NavigationManager>();
var isPlaying = false.obs; var isPlaying = false.obs;
var currentUrl = "".obs; var currentId = 0.obs;
// 播放进度相关状态 // 播放进度相关状态
var currentPosition = 0.obs; // 当前播放位置(毫秒) var currentPosition = 0.obs; // 当前播放位置(毫秒)
@ -822,7 +823,7 @@ class AgentController extends GetxController {
var status = await _musiceManager.getStatus(); var status = await _musiceManager.getStatus();
// debugPrint('获取当前音乐播放状态 $status'); // debugPrint('获取当前音乐播放状态 $status');
isPlaying.value = status['isPlaying']; isPlaying.value = status['isPlaying'];
currentUrl.value = status['url']; currentId.value = status['id'] ?? 0;
} }
// 播放音乐 // 播放音乐
@ -854,7 +855,7 @@ class AgentController extends GetxController {
_musiceManager.play(song); _musiceManager.play(song);
isPlaying.value = true; isPlaying.value = true;
currentUrl.value = song['url'] ?? ''; currentId.value = song['id'] ?? 0;
_startProgressTimer(); _startProgressTimer();
} }

6
lib/modules/agent/views/music_card.dart

@ -82,7 +82,7 @@ Widget buildMusicItem(BuildContext context, int id, String name, String url,
), ),
Obx(() { Obx(() {
final isThisPlaying = final isThisPlaying =
controller.isPlaying.value && controller.currentUrl.value == url; controller.isPlaying.value && controller.currentId.value == id;
// 只有当前播放的歌曲才显示进度 // 只有当前播放的歌曲才显示进度
final currentProgress = final currentProgress =
@ -97,13 +97,13 @@ Widget buildMusicItem(BuildContext context, int id, String name, String url,
strokeWidth: 2.0, strokeWidth: 2.0,
onPlayPause: () { onPlayPause: () {
if (controller.isPlaying.value) { if (controller.isPlaying.value) {
if (controller.currentUrl.value == url) { if (controller.currentId.value == id) {
controller.musicPause(); controller.musicPause();
} else { } else {
controller.musicPlay(song); controller.musicPlay(song);
} }
} else { } else {
if (controller.currentUrl.value == url) { if (controller.currentId.value == id) {
controller.musicResume(); controller.musicResume();
} else { } else {
controller.musicPlay(song); controller.musicPlay(song);

24
lib/modules/music/views/music_playlist_view.dart

@ -162,10 +162,11 @@ class MusicPlaylistView extends StatelessWidget {
// 播放按钮 // 播放按钮
Obx(() { Obx(() {
final isThisPlaying = final isThisPlaying =
controller.isPlaying.value && controller.currentUrl.value == url; controller.isPlaying.value && controller.currentId.value == url;
// 只有当前播放的歌曲才显示进度 // 只有当前播放的歌曲才显示进度
final currentProgress = isThisPlaying ? controller.progress.value : 0.0; final currentProgress =
isThisPlaying ? controller.progress.value : 0.0;
return CircularProgressButton( return CircularProgressButton(
isPlaying: isThisPlaying, isPlaying: isThisPlaying,
@ -176,24 +177,27 @@ class MusicPlaylistView extends StatelessWidget {
strokeWidth: 2.5, strokeWidth: 2.5,
onPlayPause: () { onPlayPause: () {
if (controller.isPlaying.value) { if (controller.isPlaying.value) {
if (controller.currentUrl.value == url) { if (controller.currentId.value == id) {
controller.musicPause(); controller.musicPause();
} else { } else {
controller.musicPlay(song); controller.musicPlay(song);
} }
} else { } else {
if (controller.currentUrl.value == url) { if (controller.currentId.value == id) {
controller.musicResume(); controller.musicResume();
} else { } else {
controller.musicPlay(song); controller.musicPlay(song);
} }
} }
}, },
onSeek: isThisPlaying ? (seekProgress) { onSeek: isThisPlaying
// 只有当前播放的歌曲才允许跳转 ? (seekProgress) {
final targetPosition = (controller.duration.value * seekProgress).round(); // 只有当前播放的歌曲才允许跳转
controller.seekToPosition(targetPosition); final targetPosition =
} : null, (controller.duration.value * seekProgress).round();
controller.seekToPosition(targetPosition);
}
: null,
); );
}), }),
], ],

9
local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt

@ -35,14 +35,14 @@ class MusicService : MediaBrowserServiceCompat() {
private const val DELETE_ACTION = "com.yunqiinnovation.music_service.DELETE_NOTIFICATION" private const val DELETE_ACTION = "com.yunqiinnovation.music_service.DELETE_NOTIFICATION"
private val isRunning = AtomicBoolean(false) private val isRunning = AtomicBoolean(false)
private var currentUrlInternal: String? = null private var currentIdInternal: Int? = null
private var currentStatus = false private var currentStatus = false
private var playlist = mutableListOf<Map<String,Any>>() private var playlist = mutableListOf<Map<String,Any>>()
private var currentIndex = 0 private var currentIndex = 0
fun isServiceRunning() = isRunning.get() fun isServiceRunning() = isRunning.get()
fun isPlaying() = currentStatus fun isPlaying() = currentStatus
fun getCurrentUrl(): String? = currentUrlInternal fun getCurrentId(): Int? = currentIdInternal
// 获取播放进度信息 // 获取播放进度信息
fun getProgress(): Map<String, Any> { fun getProgress(): Map<String, Any> {
@ -360,14 +360,15 @@ class MusicService : MediaBrowserServiceCompat() {
} }
private fun play(song: Map<String,Any>) { private fun play(song: Map<String,Any>) {
val url = song["url"] ?: return val url = song["url"] as? String ?: return
Log.i(TAG, "开始播放: $url") Log.i(TAG, "开始播放: $url")
val id = song["id"] as? Int ?: 0
val title = song["title"] as? String ?: "未知标题" val title = song["title"] as? String ?: "未知标题"
val artist = song["artist"] as? String ?: "未知歌手" val artist = song["artist"] as? String ?: "未知歌手"
val coverUrl = song["coverUrl"] as String val coverUrl = song["coverUrl"] as String
mediaPlayer?.release() mediaPlayer?.release()
currentStatus = true currentStatus = true
currentUrlInternal = url as String currentIdInternal = id
mediaPlayer = MediaPlayer().apply { mediaPlayer = MediaPlayer().apply {
setDataSource(url) setDataSource(url)
setAudioStreamType(AudioManager.STREAM_MUSIC) setAudioStreamType(AudioManager.STREAM_MUSIC)

4
local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicServicePlugin.kt

@ -63,10 +63,10 @@ class MusicServicePlugin: FlutterPlugin, MethodCallHandler {
} }
"getStatus" -> { "getStatus" -> {
val isPlaying = MusicService.isPlaying() val isPlaying = MusicService.isPlaying()
val currentUrl = MusicService.getCurrentUrl() val currentId = MusicService.getCurrentId()
val status = mapOf( val status = mapOf(
"isPlaying" to isPlaying, "isPlaying" to isPlaying,
"url" to currentUrl "id" to currentId
) )
result.success(status) result.success(status)
} }

2
local_plugins/music_service/lib/music_service.dart

@ -56,7 +56,7 @@ class MusicService {
final result = await _methodChannel.invokeMethod<Map>('getStatus'); final result = await _methodChannel.invokeMethod<Map>('getStatus');
return { return {
'isPlaying': result?['isPlaying'] ?? false, 'isPlaying': result?['isPlaying'] ?? false,
'url': result?['url'] ?? "", 'id': result?['id'] ?? 0,
}; };
} }

Loading…
Cancel
Save