Android 蓝牙音乐播放控制的接口实现

 import android.media.browse.MediaBrowser;
 import android.media.session.MediaController;

    private  final int CMD_PLAY = 1;
    private  final int CMD_PAUSE = 2;
    private  final int CMD_PRV = 3;
    private  final int CMD_NEXT = 4;

    private MediaBrowser mMediaBrowser = null;
    private MediaController mMediaController = null;
    private int mTryConnectMediaSessionCnt = 0;
    private static final String BT_BROWSED_PACKAGE = "com.android.bluetooth";
    private static final String BT_BROWSED_SERVICE =
        "com.android.bluetooth.avrcpcontroller.BluetoothMediaBrowserService";

 /**   disconnectMediaBrowser : 
  *    可以在收到BluetoothDevice.ACTION_ACL_DISCONNECTED 蓝牙断开后调用该函数
 */

    private void disconnectMediaBrowser() {
        if(null != mMediaBrowser) {
            mMediaBrowser.disconnect();
            mMediaBrowser = null;
        }
    }

 /**  connectMediaBrowser : 
  *    可以在收到BluetoothDevice.ACTION_ACL_CONNECTED蓝牙连接成功后调用该函数
 */

  private void connectMediaBrowser() {
        if(null != mMediaBrowser) {
            disconnectMediaBrowser();
        }

        mMediaBrowser = new MediaBrowser(mContext,
                new ComponentName(BT_BROWSED_PACKAGE, BT_BROWSED_SERVICE),
                mConnectionCallback, null);
        mMediaBrowser.connect();
        mTryConnectMediaSessionCnt++;
    }

    private MediaBrowser.ConnectionCallback mConnectionCallback = new MediaBrowser.ConnectionCallback() {
        @Override
        public void onConnected() {
            Log.d(TAG, "onConnected: session token " + mMediaBrowser.getSessionToken());
            if (mMediaBrowser.getSessionToken() == null) {
                throw new IllegalArgumentException("No Session token");
            }
            //get mediaContoller
            mMediaController = new MediaController(
                        mContext, mMediaBrowser.getSessionToken());


            mTryConnectMediaSessionCnt = 0;
        }

        @Override
        public void onConnectionFailed() {
            Log.d(TAG, "onConnectionFailed");
            if(mTryConnectMediaSessionCnt <= 3) {
                connectMediaBrowser();
            }
        }

        @Override
        public void onConnectionSuspended() {
            Log.d(TAG, "onConnectionSuspended");
            mTryConnectMediaSessionCnt = 0;
        }
    };

    private boolean BtMusicPlayContorlCmd(int cmd) {

         Log.d(TAG, "BtMusicPlayContorlCmd is cmd = "+cmd);
        if( null == mMediaController|| null == mMediaController.getTransportControls()) {
            Log.d(TAG, "mediaSession is not ready");
            return false;
        }

        MediaController.TransportControls mediaControllerCntrl =
                mMediaController.getTransportControls();

        switch (cmd) {
            case CMD_PLAY:
                mediaControllerCntrl.play();
                break;

            case CMD_PAUSE:
                mediaControllerCntrl.pause();
                break;

            case CMD_PRV:
                mediaControllerCntrl.skipToPrevious();
                break;

            case CMD_NEXT:
                mediaControllerCntrl.skipToNext();
                break;

        }

        return true;
    }

 

此接口实现在android6.0及以上版本试用,5.0 的没试过,4.2之前的版本无法使用,因为系统层没有相关接口。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值