You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio中实现蓝牙耳机控制播放/暂停及音量调节的代码方案

实现音乐播放器蓝牙耳机远程控制(无需打开APP)

Android 实现方案

1. 使用 MediaSessionCompat(推荐,适配Android 5.0+)

MediaSession 是Android官方推荐的媒体控制方案,能在后台稳定接收蓝牙耳机的按键事件:

  • 创建前台服务(避免后台被回收)
    用前台服务托管MediaSession,防止应用被系统杀死:

    class MusicPlayerService : Service() {
        private lateinit var mediaSession: MediaSessionCompat
    
        override fun onCreate() {
            super.onCreate()
            initMediaSession()
            // Android 8.0+必须启动前台服务,需创建通知栏
            startForeground(1, createBaseNotification())
        }
    
        private fun initMediaSession() {
            mediaSession = MediaSessionCompat(this, "MusicPlayerSession")
            mediaSession.isActive = true
            // 设置回调处理按键事件
            mediaSession.setCallback(object : MediaSessionCompat.Callback() {
                override fun onPlay() {
                    // 执行播放逻辑
                    super.onPlay()
                }
    
                override fun onPause() {
                    // 执行暂停逻辑
                    super.onPause()
                }
    
                override fun onAdjustVolume(direction: Int, flags: Int) {
                    val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
                    when (direction) {
                        1 -> audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, 0)
                        -1 -> audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, 0)
                    }
                    super.onAdjustVolume(direction, flags)
                }
            })
            // 开启媒体按键与传输控制支持
            mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
        }
    
        private fun createBaseNotification(): Notification {
            return NotificationCompat.Builder(this, "MusicPlayerChannel")
                .setContentTitle("音乐播放器")
                .setSmallIcon(R.drawable.ic_music)
                .build()
        }
    
        override fun onBind(intent: Intent): IBinder? = null
    }
    
  • 配置Manifest
    注册服务并声明必要权限:

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
    
    <application>
        <service android:name=".MusicPlayerService" />
    </application>
    

2. 兼容低版本(Android 4.4及以下)

适配旧系统可通过广播接收器监听媒体按键:

class MediaButtonReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        if (Intent.ACTION_MEDIA_BUTTON == intent?.action) {
            val keyEvent = intent.getParcelableExtra<KeyEvent>(Intent.EXTRA_KEY_EVENT)
            keyEvent?.let {
                when (it.keyCode) {
                    KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE -> // 处理播放/暂停
                    KeyEvent.KEYCODE_VOLUME_UP -> // 处理音量+
                    KeyEvent.KEYCODE_VOLUME_DOWN -> // 处理音量-
                }
            }
        }
    }
}

在Manifest中注册接收器:

<receiver android:name=".MediaButtonReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

iOS 实现方案

1. 配置音频会话与后台权限

  • 在Info.plist中开启后台模式:添加UIBackgroundModes数组,包含audio(对应Audio, AirPlay, and Picture in Picture权限)。
  • 初始化音频会话(在AppDelegate或播放器初始化处):
    import MediaPlayer
    import AVFoundation
    
    func setupAudioSession() {
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(.playback, mode: .default)
            try audioSession.setActive(true)
        } catch {
            print("音频会话配置失败: \(error)")
        }
    }
    

2. 注册远程控制命令

用MPRemoteCommandCenter监听蓝牙耳机按键:

func setupRemoteCommands() {
    let commandCenter = MPRemoteCommandCenter.shared()

    commandCenter.playCommand.addTarget { _ in
        // 执行播放逻辑
        return .success
    }

    commandCenter.pauseCommand.addTarget { _ in
        // 执行暂停逻辑
        return .success
    }

    // 音量调节系统会自动处理,如需自定义逻辑可在此扩展
    commandCenter.volumeUpCommand.isEnabled = true
    commandCenter.volumeDownCommand.isEnabled = true
}

通用注意事项

  • 测试前确保蓝牙耳机已与设备配对连接。
  • Android端需确保应用至少播放过一次音频,否则MediaSession无法接管媒体控制。
  • iOS端需保持音频会话活跃,否则后台无法接收按键命令。

内容的提问来源于stack exchange,提问作者AK The Great

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:45:42