Browse Source

上传语音关闭导航和音乐服务

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
d37d893d46
  1. 8
      local_plugins/amap_service/android/src/main/kotlin/com/yunqiinnovation/amap_service/AmapServicePlugin.kt
  2. 37
      local_plugins/amap_service/android/src/main/kotlin/com/yunqiinnovation/amap_service/NavigationActivity.kt
  3. 40
      local_plugins/amap_service/android/src/main/kotlin/com/yunqiinnovation/amap_service/NavigationService.kt
  4. 53
      local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt
  5. 5
      local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt

8
local_plugins/amap_service/android/src/main/kotlin/com/yunqiinnovation/amap_service/AmapServicePlugin.kt

@ -1,7 +1,13 @@
package com.yunqiinnovation.amap_service
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import android.util.Log
import androidx.core.content.ContextCompat.registerReceiver
import com.amap.api.navi.AMapNaviView
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.EventChannel
@ -98,4 +104,6 @@ class AmapServicePlugin: FlutterPlugin, MethodCallHandler,EventChannel.StreamHan
}
}

37
local_plugins/amap_service/android/src/main/kotlin/com/yunqiinnovation/amap_service/NavigationActivity.kt

@ -1,6 +1,10 @@
package com.yunqiinnovation.amap_service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
@ -23,7 +27,7 @@ import com.amap.api.navi.model.AimLessModeCongestionInfo
import com.amap.api.navi.model.AimLessModeStat
import com.amap.api.navi.model.NaviInfo
import com.amap.api.navi.model.NaviLatLng
import com.yunqiinnovation.amap_service.NavigationService.Companion.sharedNavi
class NavigationActivity : AppCompatActivity(), AMapNaviListener, AMapNaviViewListener {
private lateinit var naviView: AMapNaviView
@ -32,6 +36,7 @@ class NavigationActivity : AppCompatActivity(), AMapNaviListener, AMapNaviViewLi
private var startpos:String = "";
private var endpos:String = "";
private var ntype:String = "";
private var isReceiverRegistered = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_navigation)
@ -60,7 +65,31 @@ class NavigationActivity : AppCompatActivity(), AMapNaviListener, AMapNaviViewLi
}
navi?.addAMapNaviListener(this);
// 绑定当前 activity 到导航状态
// 注册广播监听器
val filter = IntentFilter().apply {
addAction("com.yunqiinnovation.amap_service.EXIT_NAVIGATION")
}
// Android 14+ 需要指定 flag
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(controlReceiver, filter, Context.RECEIVER_NOT_EXPORTED)
} else {
registerReceiver(controlReceiver, filter)
}
isReceiverRegistered = true
}
private val controlReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.i("NavigationActivity", "接受到通知事件 ${intent?.action}")
when (intent?.action) {
"com.yunqiinnovation.amap_service.EXIT_NAVIGATION" -> {
Log.d("NavigationService", "收到退出导航广播,准备停止服务")
finish()
}
}
}
}
override fun onResume() {
@ -80,6 +109,10 @@ class NavigationActivity : AppCompatActivity(), AMapNaviListener, AMapNaviViewLi
NavigationServiceHelper.startNavigation(context,"stop")
naviView.onDestroy()
super.onDestroy()
if (isReceiverRegistered) {
unregisterReceiver(controlReceiver)
isReceiverRegistered = false
}
Log.i("NavigationActivity", "liwei------------------- onDestroy!")
}

40
local_plugins/amap_service/android/src/main/kotlin/com/yunqiinnovation/amap_service/NavigationService.kt

@ -3,8 +3,10 @@ package com.yunqiinnovation.amap_service
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Bitmap
import android.os.Build
import android.os.IBinder
@ -52,11 +54,24 @@ class NavigationService: Service(),AMapNaviListener {
fun isServiceRunning() = isRunning.get()
}
private var isReceiverRegistered = false
override fun onCreate() {
super.onCreate()
instance = this
startForegroundNotification()
// 注册广播监听器
val filter = IntentFilter().apply {
addAction("com.yunqiinnovation.amap_service.EXIT_NAVIGATION")
}
// Android 14+ 需要指定 flag
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(controlReceiver, filter, Context.RECEIVER_NOT_EXPORTED)
} else {
registerReceiver(controlReceiver, filter)
}
isReceiverRegistered = false
}
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
@ -84,7 +99,17 @@ class NavigationService: Service(),AMapNaviListener {
}
return START_STICKY
}
private val controlReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.i(TAG, "接受到通知事件 ${intent?.action}")
when (intent?.action) {
"com.yunqiinnovation.amap_service.EXIT_NAVIGATION" -> {
Log.d("NavigationService", "收到退出导航广播,准备停止服务")
stopNavigation();
}
}
}
}
private fun initializeAMapNavi() {
try {
sharedNavi = AMapNavi.getInstance(applicationContext).apply {
@ -399,4 +424,15 @@ class NavigationService: Service(),AMapNaviListener {
Log.e(TAG, "onGpsSignalWeak! $p0")
// TODO("Not yet implemented")
}
override fun onDestroy() {
if (isReceiverRegistered) {
unregisterReceiver(controlReceiver)
isReceiverRegistered = false
}
stopForeground(true)
isRunning.set(false)
super.onDestroy()
}
}

53
local_plugins/chat_api/android/src/main/kotlin/com/yunqiinnovation/chat_api/SystemFunctionHandler.kt

@ -163,7 +163,17 @@ class SystemFunctionHandler(private val context: Context? = null) {
),
handler = MediaPauseHandler(context)
)
// 注册媒体暂停功能
client.registerLocalFunction(
name = "media_close",
description = "关闭媒体播放",
parameters = mapOf(
"type" to "object",
"properties" to emptyMap<String, Any>(),
"required" to emptyList<String>()
),
handler = MediaCloseHandler(context)
)
// 注册媒体上一首功能
client.registerLocalFunction(
name = "media_previous",
@ -199,6 +209,32 @@ class SystemFunctionHandler(private val context: Context? = null) {
),
handler = OpenRecorderHandler(context)
)
// 注册退出交互函数
client.registerLocalFunction(
name = "exit_navigation",
description = "结束当前导航服务",
parameters = mapOf(
"type" to "object",
"properties" to emptyMap<String, Any>(),
"required" to emptyList<String>()
),
handler = ExitNavigationHandler(context)
)
}
}
/**
* 退出导航服务
*/
private class ExitNavigationHandler(private val context: Context?) : FunctionHandler {
override suspend fun handle(arguments: Map<String, Any>): String {
// 发送广播通知退出交互
val intent = Intent("com.yunqiinnovation.amap_service.EXIT_NAVIGATION").apply {
setPackage(context?.packageName) // 设置包名使其成为显式 Intent
}
context?.sendBroadcast(intent)
return "{\"result\": \"已结束当前导航服务\"}"
}
}
@ -417,7 +453,20 @@ private class MediaPauseHandler(private val context: Context?) : FunctionHandler
return "{\"result\": \"已暂停媒体播放\"}"
}
}
/**
* 媒体暂停处理器
*/
private class MediaCloseHandler(private val context: Context?) : FunctionHandler {
override suspend fun handle(arguments: Map<String, Any>): String {
Log.d("MediaPauseHandler", "📤 正在发送广播 context = $context")
// 发送媒体暂停广播
val intent = Intent("com.yunqiinnovation.music_service.MEDIA_CLOSE").apply {
setPackage(context?.packageName) // 设置包名使其成为显式 Intent
}
context?.sendBroadcast(intent)
return "{\"result\": \"已关闭媒体播放\"}"
}
}
/**
* 媒体上一首处理器
*/

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

@ -60,6 +60,7 @@ class MusicService : MediaBrowserServiceCompat() {
val filter = IntentFilter().apply {
addAction("com.yunqiinnovation.music_service.MEDIA_PLAY")
addAction("com.yunqiinnovation.music_service.MEDIA_PAUSE")
addAction("com.yunqiinnovation.music_service.MEDIA_CLOSE")
addAction("com.yunqiinnovation.music_service.MEDIA_PREVIOUS")
addAction("com.yunqiinnovation.music_service.MEDIA_NEXT")
}
@ -132,6 +133,10 @@ class MusicService : MediaBrowserServiceCompat() {
Log.i(TAG, "收到 MEDIA_PLAY 广播")
resume()
}
"com.yunqiinnovation.music_service.MEDIA_CLOSE" -> {
Log.i(TAG, "收到 MEDIA_CLOSE 广播")
stopSelf()
}
"com.yunqiinnovation.music_service.MEDIA_PREVIOUS" -> {
Log.i(TAG, "收到 MEDIA_PREVIOUS 广播")
playPrevious()

Loading…
Cancel
Save