如何解决xamarin形式-在应用程序中检测外部蓝牙的“打开”并相应地切换“切换”
是否有一种方法可以使应用从外部触发器读取蓝牙激活,例如,当用户向下滑动屏幕并将其打开并相应地在应用中切换开关时(例如,如果用户从外部将其打开,则我应该将自动切换为打开,反之亦然)。
这是我用来在应用程序中打开和关闭蓝牙的xamarin C#代码。
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,ToastLength.Long).Show();
e.Equals(false);
}
else
{
string okay = "Bluetooth has been turned off";
_manager.Adapter.Disable();
Toast.MakeText(this,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,true);
// await DisplayAlert("Bluetooth Status","Bluetooth has been turned on","OK");
}
else
{
MessagingCenter.Send<object,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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。