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

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

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

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

@ -162,10 +162,11 @@ class MusicPlaylistView extends StatelessWidget {
// 播放按钮
Obx(() {
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(
isPlaying: isThisPlaying,
@ -176,24 +177,27 @@ class MusicPlaylistView extends StatelessWidget {
strokeWidth: 2.5,
onPlayPause: () {
if (controller.isPlaying.value) {
if (controller.currentUrl.value == url) {
if (controller.currentId.value == id) {
controller.musicPause();
} else {
controller.musicPlay(song);
}
} else {
if (controller.currentUrl.value == url) {
if (controller.currentId.value == id) {
controller.musicResume();
} else {
controller.musicPlay(song);
}
}
},
onSeek: isThisPlaying ? (seekProgress) {
// 只有当前播放的歌曲才允许跳转
final targetPosition = (controller.duration.value * seekProgress).round();
controller.seekToPosition(targetPosition);
} : null,
onSeek: isThisPlaying
? (seekProgress) {
// 只有当前播放的歌曲才允许跳转
final targetPosition =
(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 val isRunning = AtomicBoolean(false)
private var currentUrlInternal: String? = null
private var currentIdInternal: Int? = null
private var currentStatus = false
private var playlist = mutableListOf<Map<String,Any>>()
private var currentIndex = 0
fun isServiceRunning() = isRunning.get()
fun isPlaying() = currentStatus
fun getCurrentUrl(): String? = currentUrlInternal
fun getCurrentId(): Int? = currentIdInternal
// 获取播放进度信息
fun getProgress(): Map<String, Any> {
@ -360,14 +360,15 @@ class MusicService : MediaBrowserServiceCompat() {
}
private fun play(song: Map<String,Any>) {
val url = song["url"] ?: return
val url = song["url"] as? String ?: return
Log.i(TAG, "开始播放: $url")
val id = song["id"] as? Int ?: 0
val title = song["title"] as? String ?: "未知标题"
val artist = song["artist"] as? String ?: "未知歌手"
val coverUrl = song["coverUrl"] as String
mediaPlayer?.release()
currentStatus = true
currentUrlInternal = url as String
currentIdInternal = id
mediaPlayer = MediaPlayer().apply {
setDataSource(url)
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" -> {
val isPlaying = MusicService.isPlaying()
val currentUrl = MusicService.getCurrentUrl()
val currentId = MusicService.getCurrentId()
val status = mapOf(
"isPlaying" to isPlaying,
"url" to currentUrl
"id" to currentId
)
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');
return {
'isPlaying': result?['isPlaying'] ?? false,
'url': result?['url'] ?? "",
'id': result?['id'] ?? 0,
};
}

Loading…
Cancel
Save