getAudioStream method
Implementation
Future<StreamSubscription?> getAudioStream({
required Function(List<int>) onAudioReceived,
}) async {
if (!isConnected || _connectedDevice == null) {
throw Exception('Device not connected');
}
try {
final services = await _connectedDevice!.discoverServices();
final audioService = services.firstWhere(
(s) =>
s.uuid.str128.toLowerCase() ==
DeviceConstants.omiServiceUuid.toLowerCase(),
orElse: () => throw Exception('Audio service not found'),
);
final audioCharacteristic = audioService.characteristics.firstWhere(
(c) =>
c.uuid.str128.toLowerCase() ==
DeviceConstants.audioCharacteristicUuid.toLowerCase(),
orElse: () => throw Exception('Audio characteristic not found'),
);
if (Platform.isAndroid &&
_connectedDevice!.mtuNow < DeviceConstants.defaultMtuSize) {
await _connectedDevice!.requestMtu(DeviceConstants.defaultMtuSize);
}
await audioCharacteristic.setNotifyValue(true);
final subscription = audioCharacteristic.lastValueStream.listen((value) {
if (value.isNotEmpty) {
onAudioReceived(value);
}
});
_connectedDevice!.cancelWhenDisconnected(subscription);
return subscription;
} catch (e) {
throw Exception('Failed to setup audio stream: $e');
}
}