[英]Xamarin Forms Switch IsToggled Binding NRE on Toggle [Android]
[英]xamarin forms — detect external bluetooth 'turn on' and toggle 'switch' accordingly in the app
有沒有辦法讓應用程序從外部觸發器讀取藍牙激活,例如當用戶向下滑動屏幕並打開它並在應用程序中相應地切換開關時(即,如果用戶從外部打開它,那么我的開關應該自動切換本身打開,反之亦然)。 這是我用來在我的應用程序中打開和關閉藍牙的 xamarin C# 代碼。
主Activity.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();
}
}
我在主要活動中使用的訂閱者消息中心是這個
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 代碼來進入 ART,導出狀態並將開關的切換設置為在用戶從外部活動觸發狀態時打開或關閉,謝謝
您可以創建一個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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.