Android蓝牙播放流程
时间: 2025-03-02 18:11:55 浏览: 39
### Android 平台下通过蓝牙进行音频播放的流程
在 Android 中实现蓝牙音频播放涉及多个组件之间的协调工作。以下是详细的开发指南:
#### 1. 获取必要的权限
为了使应用程序能够访问蓝牙功能并处理音频流,必须在 `AndroidManifest.xml` 文件中声明相应的权限[^2]:
```xml
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<!-- For Android 6.0 and above -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
```
#### 2. 初始化 BluetoothAdapter 和 Profile
要建立与蓝牙设备的连接,首先要获取默认的 `BluetoothAdapter` 实例,并确保其已启用。接着初始化目标配置文件(Profile),对于音频应用来说通常是 A2DP (Advanced Audio Distribution Profile)[^1]:
```java
// Get the default adapter
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
// Initialize A2DP profile
mBluetoothA2dp = mBluetoothAdapter.getProfileProxy(context,
new BluetoothProfile.ServiceListener() { ... }, BluetoothProfile.A2DP);
```
#### 3. 连接至远程设备
一旦获得了适配器实例及其关联的服务接口,则可以开始扫描附近的可配对设备列表,并尝试与其建立连接。
```java
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
String name = device.getName();
String address = device.getAddress();
// Connect to specific audio sink here...
}
```
#### 4. 设置媒体会话和控制器
为了让系统知道当前的应用正在播放音乐并通过合适的输出路径发送声音信号,在创建好蓝牙链接之后还需要设置MediaSession对象以及对应的TransportControls属性[^3].
```java
mediaSession = new MediaSessionCompat(this, TAG);
mediaControllerCallback = new MediaControllerCompat.Callback(){
@Override public void onAudioInfoChanged(MediaControllerCompat.PlaybackInfo info){
super.onAudioInfoChanged(info);
int type = info.getPlaybackType();
switch(type){
case PlaybackState.PLAYBACK_TYPE_LOCAL://本地播放模式
break;
case PlaybackState.PLAYBACK_TYPE_REMOTE://远程播放模式,即蓝牙耳机等外设
AudioManager am=(AudioManager)getSystemService(AUDIO_SERVICE);
am.setMode(AudioManager.MODE_NORMAL);
am.startBluetoothSco();
am.setBluetoothScoOn(true);
break;
}
}
};
```
#### 5. 启动音频录制/回放服务
最后一步就是启动实际负责捕获麦克风输入或将预存好的音轨推送到扬声器上的逻辑单元——这通常由 `MediaPlayer` 或者自定义的 `AudioTrack` 类完成。
```java
player = MediaPlayer.create(context, R.raw.sample_audio_file);
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
player.start();
}
});
```
阅读全文
相关推荐




















