android 车载蓝牙音乐介绍

本文详细介绍了Android车载蓝牙音乐的实现,包括蓝牙广播部分的关键类如BluetoothAdapter、BluetoothAvrcpController和BluetoothA2dpSink的作用,以及如何处理蓝牙连接、媒体信息和进度条。此外,还提供了蓝牙接口的操作,如获取蓝牙设备名字、播放控制、媒体信息获取等。作者分享了项目源码地址,供读者参考和学习。
摘要由CSDN通过智能技术生成

网上蓝牙音乐相关的文章实在太少,贡献一下自己的微薄之力

先讲一些零碎知识点:

##################################华丽分割线###################################
蓝牙的源码路径

frameworks\base\core\java\android\bluetooth

##################################华丽分割线###################################
蓝牙音乐使用中需要用到的权限

在apk中的AndroidManifest.xml中要有以下语句获得蓝牙相关权限:

  <uses-permission android:name="android.permission.BLUETOOTH" />
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />

##################################华丽分割线 下面介绍蓝牙的广播部分 start###############################

蓝牙的广播部分

蓝牙的连接

注册蓝牙回调,这里需要讲一下BluetoothAdapter、BluetoothAvrcpController、BluetoothA2dpSink三个类

BluetoothAdapter作用:

获取蓝牙开关状态,搜索蓝牙,配对蓝牙等

BluetoothAvrcpController作用:

这个类里主要是维护蓝牙音乐的相关信息更新(ID3),操作控制蓝牙音乐(播放暂停上一曲下一曲等)

BluetoothA2dpSink 作用:

这个类里主要是确定蓝牙音乐是否连接上

注册蓝牙回调广播

    public void registerBtReceiver(Context context) {
   
        IntentFilter intentFilter = new IntentFilter();
          //A2DP连接状态改变
        intentFilter.addAction(BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED);
      //A2DP播放状态改变
        intentFilter.addAction(BluetoothA2dpSink.ACTION_PLAYING_STATE_CHANGED);
        //监听蓝牙音乐暂停、播放等 
        intentFilter.addAction(BluetoothAvrcpController.ACTION_TRACK_EVENT);
        //连接状态
        intentFilter.addAction(BluetoothAvrcpController.ACTION_CONNECTION_STATE_CHANGED);
		//浏览        
        intentFilter.addAction(BluetoothAvrcpController.ACTION_BROWSE_CONNECTION_STATE_CHANGED);
        // 正在浏览的事件 
        intentFilter.addAction(BluetoothAvrcpController.ACTION_BROWSING_EVENT);
        //当前 媒体 项目 改变  
        intentFilter.addAction(BluetoothAvrcpController.ACTION_CURRENT_MEDIA_ITEM_CHANGED);
        intentFilter.addAction(BluetoothAvrcpController.ACTION_PLAYER_SETTING);
        //没有媒体信息
        intentFilter.addAction(BluetoothAvrcpController.ACTION_PLAY_FAILURE);
        intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        intentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
        intentFilter.addAction(BluetoothDevice.ACTION_NAME_CHANGED);

        context.registerReceiver(mBtReceiver, intentFilter);
    }

注册完回调以后,会有一个回调函数

    private BroadcastReceiver mBtReceiver = new BroadcastReceiver() {
   
        @Override
        public void onReceive(Context context, Intent intent) {
   
            switch (intent.getAction()) {
   
                case BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED:
                	//todo 主要处理蓝牙a2dp连接状态
                    break;
                case BluetoothA2dpSink.ACTION_PLAYING_STATE_CHANGED:
                    LogUtil.e(TAG, "mBtReceiver,
                    //控制蓝牙的播放状态,启动这个作为播放状态更新,时序太慢,所以注意不要用这个回调更新播放状态,建议在BluetoothAvrcpController.ACTION_TRACK_EVENT回调中处理播放状态
                    break;
                case BluetoothAvrcpController.ACTION_CONNECTION_STATE_CHANGED:
                    break;
                case BluetoothAvrcpController.ACTION_TRACK_EVENT:
                //处理媒体信息,包括需要显示的MediaMetadata基本信息,和实时更新的PlaybackState信息
                    break;
                case BluetoothAvrcpController.ACTION_BROWSE_CONNECTION_STATE_CHANGED:
                // 手机端断开并重新连接上需要更新
                    break;
                case BluetoothAvrcpController.ACTION_BROWSING_EVENT:
                //蓝牙音乐列表
                    break;
                case BluetoothAvrcpController.ACTION_CURRENT_MEDIA_ITEM_CHANGED:
                    //广播得到媒体信息
                    BluetoothAvrcpMediaItemData mMeidaItemData = intent.getParcelableExtra(BluetoothAvrcpController
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值