我希望在Flutter应用程序中控制播放不同应用程序(如Spotify / Youtube Music等)正在播放的音乐,例如暂停/播放和跳过。有没有办法实现这个功能?
提前感谢!
我希望在Flutter应用程序中控制播放不同应用程序(如Spotify / Youtube Music等)正在播放的音乐,例如暂停/播放和跳过。有没有办法实现这个功能?
提前感谢!
据我所知,目前没有适用于此的软件包。我有一个仅支持 Android 的应用程序,我正在尝试让它正常工作,解决方法是创建一个平台通道,然后执行某些操作。
package com.example.myapp
import android.content.Context
import android.content.Intent
import android.media.AudioManager
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.KeyEvent
import androidx.annotation.RequiresApi
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.MethodChannel
class MainActivity: FlutterActivity() {
private val METHOD_CHANNEL_NAME = "com.example.myapp/media_control"
private var methodChannel: MethodChannel? = null
private var audioManager: AudioManager? = null;
@RequiresApi(Build.VERSION_CODES.O)
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
setupChannels(this, flutterEngine.dartExecutor.binaryMessenger)
}
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
super.onCreate(savedInstanceState)
}
@RequiresApi(Build.VERSION_CODES.O)
private fun setupChannels(mainActivity: MainActivity, binaryMessenger: BinaryMessenger) {
methodChannel = MethodChannel(binaryMessenger, METHOD_CHANNEL_NAME)
methodChannel!!.setMethodCallHandler { call, result ->
if(call.method == "pause") {
sendMediaButton(KeyEvent.KEYCODE_MEDIA_PAUSE)
result.success("Success");
}
else if (call.method == "play") {
sendMediaButton(KeyEvent.KEYCODE_MEDIA_PLAY)
result.success("Success");
}
else if (call.method == "skipNext") {
sendMediaButton(KeyEvent.KEYCODE_MEDIA_NEXT)
result.success("Success");
}
else if (call.method == "skipPrevious") {
sendMediaButton(KeyEvent.KEYCODE_MEDIA_PREVIOUS)
result.success("Success");
}
}
}
private fun sendMediaButton(keyCode: Int) {
var keyEvent = KeyEvent(KeyEvent.ACTION_DOWN, keyCode)
audioManager!!.dispatchMediaKeyEvent(keyEvent)
keyEvent = KeyEvent(KeyEvent.ACTION_UP, keyCode)
audioManager!!.dispatchMediaKeyEvent(keyEvent)
}
}