将 BLE 设备数据读入 xamarin android 平板电脑应用

问题描述

我是 xamarin 和 BLE 设备的新手,正在尝试创建一个安卓表格应用程序来连接和读取我从亚马逊购买的血压设备。我环顾四周,得到了许多测试代码,但我无法获得任何名称或连接到应用程序扫描的任何设备。 我正在使用 10" android 平板电脑,pie 9.0,api 28,通过 USB 电缆连接到 Windows 笔记本电脑。 这是我的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.app1">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="App1.Android" android:theme="@style/MainTheme"></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.BLUetoOTH" />
  <uses-permission android:name="android.permission.BLUetoOTH_ADMIN" />

    <uses-permission  android:name = " android.permission.BLUetoOTH_PRIVILEGED " />
    <uses-permission  android:name = " android.permission.LOCATION_HARDWARE " />
    <uses-feature  android:name = " android.hardware.bluetooth_le "  android:required = " true " />   
</manifest>

这里是主页代码

        public MainPage()
        {
            InitializeComponent();
       
            _bluetoothAdapter = CrossBluetoothLE.Current.Adapter;
            _bluetoothAdapter.Devicediscovered += (s,a) =>
            {
                _gattDevices.Add(a.Device);
            };
        }

并扫描按钮代码

private async void ScanButton_Clicked(object sender,EventArgs e)
{

    ScanButton.IsEnabled = false;
    var locationPermissionStatus = await Crosspermissions.Current.CheckPermissionStatusAsync(Permission.Location);

    if (locationPermissionStatus != PermissionStatus.Granted)
    {
        if (await Crosspermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
        {
            await displayAlert("Permission required","Application needs location permission","OK");
        }

        var requestLocationPermissionStatus = await Crosspermissions.Current.RequestPermissionsAsync(new[] { Permission.Location });

        var locationPermissionPersent = requestLocationPermissionStatus.FirstOrDefault(x => x.Key == Permission.Location);
        if (locationPermissionPersent.Value != null)
            if (locationPermissionPersent.Value == PermissionStatus.Granted) locationPermissionStatus = PermissionStatus.Granted;
    }

    if (locationPermissionStatus != PermissionStatus.Granted)
    {
        await displayAlert("Permission required","OK");
        return;
    }

    _gattDevices.Clear();

    await _bluetoothAdapter.StartScanningForDevicesAsync();
    listView.ItemsSource = _gattDevices.ToArray();
    ScanButton.IsEnabled = true;
}

这里是项目选择代码

private async void FoundBluetoothDevicesListView_ItemSelected(object sender,selecteditemchangedEventArgs e)
{
    if (_bluetoothAdapter.IsScanning)
        await _bluetoothAdapter.StopScanningForDevicesAsync();

    IDevice selectedItem = e.SelectedItem as IDevice;

    try
    {
        ConnectParameters para = new ConnectParameters(true,true);
        await _bluetoothAdapter.ConnectToDeviceAsync(selectedItem,para);
        //await _bluetoothAdapter.ConnectToDeviceAsync(selectedItem);
        //await Navigation.PushAsync(new BluetoothDataPage(selectedItem));
        await displayAlert("Notice","connected","success !");
    }
    catch (DeviceConnectionException err)
    {
        await displayAlert("Notice",err.Message,"Error !");
    }

}

已授予所有适当的权限。 扫描运行时,没有名称显示 ID,当我选择一个项目时,“成功”对话框永远不会弹出,代码永远不会到达,它挂在连接调用上!我试图扫描我的 iphone 并且代码甚至没有得到 iphone 名称。任何帮助都受到高度赞赏。谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)