private async void EnableAudioPlaybackConnectionButton_Click(object sender, RoutedEventArgs e) { if (!(DeviceListView.SelectedItem is null)) { var selectedDeviceId = (DeviceListView.SelectedItem as DeviceInformation).Id; if (!this.audioPlaybackConnections.ContainsKey(selectedDeviceId)) { // Create the audio playback connection from the selected device id and add it to the dictionary. // This will result in allowing incoming connections from the remote device. var playbackConnection = AudioPlaybackConnection.TryCreateFromId(selectedDeviceId); if (playbackConnection != null) { // The device has an available audio playback connection. playbackConnection.StateChanged += this.AudioPlaybackConnection_ConnectionStateChanged; this.audioPlaybackConnections.Add(selectedDeviceId, playbackConnection); await playbackConnection.StartAsync(); OpenAudioPlaybackConnectionButtonButton.IsEnabled = true; } } } }
public async Task ConnectAsync() { try { if (AudioConnection != null) { AudioConnection.Dispose(); AudioConnection = null; } ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_1"); ActionButtonEnabled = false; Status = Globalization.GetString("BluetoothAudio_Status_2"); OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); ConnectionStatusChanged?.Invoke(this, true); AudioConnection = AudioPlaybackConnection.TryCreateFromId(Id); if (AudioConnection != null) { await AudioConnection.StartAsync(); AudioPlaybackConnectionOpenResult Result = await AudioConnection.OpenAsync(); switch (Result.Status) { case AudioPlaybackConnectionOpenResultStatus.Success: { IsConnected = true; ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_2"); Status = Globalization.GetString("BluetoothAudio_Status_3"); ActionButtonEnabled = true; OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); break; } case AudioPlaybackConnectionOpenResultStatus.RequestTimedOut: { IsConnected = false; ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_1"); Status = Globalization.GetString("BluetoothAudio_Status_4"); ActionButtonEnabled = true; OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); ConnectionStatusChanged?.Invoke(this, false); LogTracer.Log("Connect to AudioPlayback failed for time out"); break; } case AudioPlaybackConnectionOpenResultStatus.DeniedBySystem: { IsConnected = false; ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_1"); Status = Globalization.GetString("BluetoothAudio_Status_5"); ActionButtonEnabled = true; OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); ConnectionStatusChanged?.Invoke(this, false); LogTracer.Log("Connect to AudioPlayback failed for being denied by system"); break; } case AudioPlaybackConnectionOpenResultStatus.UnknownFailure: { IsConnected = false; ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_1"); Status = Globalization.GetString("BluetoothAudio_Status_6"); ActionButtonEnabled = true; OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); ConnectionStatusChanged?.Invoke(this, false); if (Result.ExtendedError != null) { LogTracer.Log(Result.ExtendedError, "Connect to AudioPlayback failed for unknown reason"); } else { LogTracer.Log("Connect to AudioPlayback failed for unknown reason"); } break; } } } else { IsConnected = false; ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_1"); Status = Globalization.GetString("BluetoothAudio_Status_7"); ActionButtonEnabled = true; OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); ConnectionStatusChanged?.Invoke(this, false); } } catch (Exception ex) { LogTracer.Log(ex, $"Unable to create a new {nameof(AudioPlaybackConnection)}"); IsConnected = false; ActionButtonText = Globalization.GetString("BluetoothAudio_Button_Text_1"); Status = Globalization.GetString("BluetoothAudio_Status_7"); ActionButtonEnabled = true; OnPropertyChanged(nameof(ActionButtonEnabled)); OnPropertyChanged(nameof(ActionButtonText)); OnPropertyChanged(nameof(Status)); ConnectionStatusChanged?.Invoke(this, false); } }