我有一个oneplus 8 pro设备,并测试了我们的android应用程序(Xamarin)。
当我尝试使用三星设备时,我可以发现BLE设备没有问题,但是当我尝试使用oneplus时,我什么也没得到,对于ActionBondStateChanged,ActionFound以及ActionDiscoveryFinished,OnReceive方法均未触发。
但是当打开蓝牙设置并触摸“配对新设备”时,它会搜索,当我返回到我的应用程序时,会触发ActionDiscoveryFinished(而不是ActionFound)
PS:我关闭了省电模式。
我真的不知道什么可能导致此问题。 这是我的代码
public class Receiver : BroadcastReceiver
{
actDetectBluetoothDevices _parentActivity;
public Receiver(actDetectBluetoothDevices parentActivity)
{
_parentActivity = parentActivity;
}
public override void OnReceive(Context context, Intent intent)
{
string action = intent.Action;
// When discovery finds a device
switch (action)
{
// Get the BluetoothDevice object from the Intent
case BluetoothDevice.ActionFound:
var device = (BluetoothDevice)intent.GetParcelableExtra(BluetoothDevice.ExtraDevice);
// If it's already paired, skip it, because it's been listed already
if (device.BondState != Bond.Bonded)
{
// check if the device has been already added, if added then skip it.. (prevent duplication)
if (!_addedBluetoothDeviceAddresses.Contains(device.Address))
{
_addedBluetoothDeviceAddresses.Add(device.Address);
_newDevicesArrayAdapter.Add(string.Format("{0}\n{1}", device.Name, device.Address));
}
}
break;
// When discovery is finished, change the Activity title
case BluetoothAdapter.ActionDiscoveryFinished:
_parentActivity.ShowProgressBar(false);
_parentActivity.ShowScanButton(true);
_parentActivity.SetTitle(Resource.String.config_bt_select_device);
if (_newDevicesArrayAdapter.Count == 0)
{
var noDevices = _parentActivity.Resources.GetText(Resource.String.config_bt_none_found);
_newDevicesArrayAdapter.Add(noDevices);
}
break;
}
}
}
这里是我如何初始化
_receiver = new Receiver(this);
var filter = new IntentFilter(BluetoothDevice.ActionFound);
RegisterReceiver(_receiver, filter);
RegisterReceiver(_receiver, new IntentFilter(BluetoothDevice.ActionBondStateChanged));
// Register for broadcasts when discovery has finished
filter = new IntentFilter(BluetoothAdapter.ActionDiscoveryFinished);
RegisterReceiver(_receiver, filter);
_btAdapter = DeviceTools.GetBluetoothAdapter(this);
_btAdapter.StartDiscovery();
并且此方法为我提供了BluetoothAdapter的实例
public static BluetoothAdapter GetBluetoothAdapter(Context context)
{
BluetoothAdapter adapter = null;
// Retrieve the adapter differently based on the current android version
if (IsOsVersionEqualOrLessThan(BuildVersionCodes.JellyBeanMr1))
{
adapter = BluetoothAdapter.DefaultAdapter;
}
else if (IsOsVersionEqualOrGreaterThan(BuildVersionCodes.JellyBeanMr2))
{
var bluetoothManager = (BluetoothManager)context.GetSystemService(Context.BluetoothService);
adapter = bluetoothManager.Adapter;
}
return adapter;
}
PS:在上面的代码中输入“ else if”部分。我也尝试过BluetoothAdapter.DefaultAdapter,但结果相同。