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);
            }
        }