формы xamarin — обнаруживают «включение» внешнего Bluetooth и переключают «переключатель» соответственно в приложении

#c# #xamarin #bluetooth #switch-statement #toggle

#c# #xamarin #bluetooth #оператор переключения #переключить

Вопрос:

Есть ли способ заставить приложение считывать активацию Bluetooth с внешнего триггера, например, когда пользователь проводит пальцем по экрану и включает его, и соответствующим образом переключает переключатель в приложении (т. Е. Если пользователь внешне включает его, мой переключатель должен автоматически переключаться на on и наоборот). Вот код xamarin C #, который я использую для включения и выключения Bluetooth в моем приложении.
MainActivity.cs

 void Enable(object sender, EventArgs e)
            {
            BluetoothManager _manager;
            _manager = (BluetoothManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.BluetoothService);
            bool on = _manager.Adapter.IsEnabled;
            if (on == true)
            {
                string error = "Bluetooth is Already on";
                Toast.MakeText(this, error, ToastLength.Long).Show();
                e.Equals(true);
            }
            else
            {
                string okay = "Bluetooth has been turned on";
                _manager.Adapter.Enable();
                Toast.MakeText(this, okay, ToastLength.Long).Show();

            }
        }
 void Disable(object sender, EventArgs e)
            {
            BluetoothManager _manager;
            _manager = (BluetoothManager)Android.App.Application.Context.GetSystemService(Android.Content.Context.BluetoothService);
            bool on = _manager.Adapter.IsEnabled;
            if (on == false)
            {
                string error = "Bluetooth is Already off";
                Toast.MakeText(this, error, ToastLength.Long).Show();
                e.Equals(false);
               
            }
            else
            {
                string okay = "Bluetooth has been turned off";
                _manager.Adapter.Disable();
                Toast.MakeText(this, okay, ToastLength.Long).Show();

            }
        }
  

Центр обмена сообщениями подписчиков, который я использовал в mainactivity, — это этот

   BluetoothAndroid();
            MessagingCenter.Subscribe<object, bool>(this, "Bluetooth", (sender, isEnabled) =>
            {
                if (isEnabled)
                {
                    Enable(null, new EventArgs());
                }
                else
                {
                    Disable(null, new EventArgs());
                }
            });
  

и метод MainPage.xaml.cs Subscriber.sender является

  private  void Enable(object sender, ToggledEventArgs e) {
            if (e.Value == true)
            {
                MessagingCenter.Send<object, bool>(this, "Bluetooth", true);
               // await DisplayAlert("Bluetooth Status", "Bluetooth has been turned on", "OK");

            }
            else
            {
                MessagingCenter.Send<object, bool>(this, "Bluetooth", false);
               // await DisplayAlert("Bluetooth Status", "Bluetooth has been turned off", "OK");
            }
        }
  

Все, что мне нужно, это код C sharp, чтобы разобраться в технике, получить состояние и установить переключатель переключателя включенным или выключенным, когда пользователь запускает состояние из внешней активности, спасибо

Комментарии:

1. Есть ли какие-либо обновления для этой проблемы?

2. Нет, его класс не показал никаких ошибок, но я все еще не могу включить Bluetooth с внешнего триггера

Ответ №1:

Вы можете создать BroadcastReceiver прослушивание android.bluetooth.adapter.action.STATE_CHANGED действия и действовать соответствующим образом.

 [BroadcastReceiver]
[IntentFilter(new[] { BluetoothAdapter.ActionStateChanged })]
public class BluetoothStateChangedReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        if (intent.Extras == null)
            return;

        var state = intent.GetIntExtra(BluetoothAdapter.ExtraState, -1);

        switch(state)
        {
            case (int)State.On:
                // bluetooth is on
                break;
            case (int)State.Off:
                // bluetooth is off
                break;
        }
    }
}
  

Вам нужно будет создать экземпляр и зарегистрировать свой приемник, хорошим местом будет ваш MainActivity.

Комментарии:

1. Большое спасибо @CheeseBaron, позвольте мне реализовать это, я сразу вернусь с отзывом