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之前的版本无法使用,因为系统层没有相关接口。