精华内容
下载资源
问答
  • Xamarin蓝牙打印

    2018-08-13 12:52:29
    Xamarin蓝牙打印,已经封装好了代码,直接移植过去使用,可自行扩展,按照使用例子直接调用打印。注意:需要打开设备的蓝牙。
  • Xamarin蓝牙打印,已经封装好了代码,直接移植过去使用,可自行扩展,按照使用例子直接调用打印。注意:需要打开设备的蓝牙。
  • 1、同一个app在两部 mate30 手机上。一个能获取到蓝牙列表,一个是获取不到。 经过检测,两部mate30手机的,蓝牙与打印机连接正常。 这个大概是那里的问题
  • Xamarin和MvvMCross插件,用于访问蓝牙功能。 该插件宽松地基于的BLE实现。 重要说明:术语“香草”是指非MvvmCross /纯Xamarin版本。 如果下载香草包,则可以不使用MvvmCross来使用它。 支持与限制 平台 版 局限...
  • xamarin android c# 蓝牙源码

    热门讨论 2013-11-18 11:18:11
    xamarin android c# 蓝牙源码 在vs2010上编通过 可以跟蓝牙模块通信,
  • 运用跨平台框架Xamarin, 基于VS2017进行的移动app开发,实现 蓝牙扫描、配对、连接,通信开发
  • Bluetooth LE plugin for Xamarin Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plugin is loosely based on the BLE implementation of Monkey Robotics.Important Note: With t....

    62eebaaab2bbf9731d31b01b28c299a2.png Bluetooth LE plugin for Xamarin 68747470733a2f2f6170702e626974726973652e696f2f6170702f336665353464306135663433633262662f7374617475732e7376673f746f6b656e3d69394c555934724965635a57645f336a376877586777

    Xamarin and MvvMCross plugin for accessing the bluetooth functionality. The plugin is loosely based on the BLE implementation of Monkey Robotics.

    Important Note: With the term "vanilla" we mean the non MvvmCross/pure Xamarin version. You can use it without MvvmCross, if you download the vanilla package.

    Support & Limitations

    Platform

    Version

    Limitations

    Xamarin.Android

    4.3

    Xamarin.iOS

    7.0

    Xamarin.Mac

    10.9 (Mavericks)

    >= v2.1.0

    UWP

    1709 - 10.0.16299 (Fall Creators Update)

    TBA

    Installation

    Vanilla

    // stable

    Install-Package Plugin.BLE

    // or pre-release

    Install-Package Plugin.BLE -Pre

    68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f506c7567696e2e424c452e7376673f6c6162656c3d4e75476574267374796c653d666c61742d73717561726568747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f506c7567696e2e424c452e7376673f6c6162656c3d4e7547657425323042657461267374796c653d666c61742d737175617265

    MvvmCross

    Install-Package MvvmCross.Plugin.BLE

    // or

    Install-Package MvvmCross.Plugin.BLE -Pre

    68747470733a2f2f696d672e736869656c64732e696f2f6e756765742f762f4d76766d43726f73732e506c7567696e2e424c452e7376673f6c6162656c3d4e754765742532304d76764d43726f7373267374796c653d666c61742d73717561726568747470733a2f2f696d672e736869656c64732e696f2f6e756765742f767072652f4d76766d43726f73732e506c7567696e2e424c452e7376673f6c6162656c3d4e754765742532304d76764d43726f737325323042657461267374796c653d666c61742d737175617265

    Android

    Add these permissions to AndroidManifest.xml. For Marshmallow and above, please follow Requesting Runtime Permissions in Android Marshmallow and don't forget to prompt the user for the location permission.

    Add this line to your manifest if you want to declare that your app is available to BLE-capable devices only:

    iOS

    On iOS you must add the following keys to your Info.plist

    UIBackgroundModes

    bluetooth-central

    bluetooth-peripheral

    NSBluetoothPeripheralUsageDescription

    YOUR CUSTOM MESSAGE

    NSBluetoothAlwaysUsageDescription

    YOUR CUSTOM MESSAGE

    MacOS

    On MacOS (version 11 and above) you must add the following keys to your Info.plist:

    NSBluetoothAlwaysUsageDescription

    YOUR CUSTOM MESSAGE

    Sample app

    We provide a sample Xamarin.Forms app, that is a basic bluetooth LE scanner. With this app, it's possible to

    check the ble status

    discover devices

    connect/disconnect

    discover the services

    discover the characteristics

    see characteristic details

    read/write and register for notifications of a characteristic

    Have a look at the code and use it as starting point to learn about the plugin and play around with it.

    Usage

    Vanilla

    var ble = CrossBluetoothLE.Current;

    var adapter = CrossBluetoothLE.Current.Adapter;

    MvvmCross

    The MvvmCross plugin registers IBluetoothLE and IAdapter as lazy initialized singletons. You can resolve/inject them as any other MvvmCross service. You don't have to resolve/inject both. It depends on your use case.

    var ble = Mvx.Resolve();

    var adapter = Mvx.Resolve();

    or

    MyViewModel(IBluetoothLE ble, IAdapter adapter)

    {

    this.ble = ble;

    this.adapter = adapter;

    }

    Please make sure you have this code in your LinkerPleaseLink.cs file

    public void Include(MvvmCross.Plugins.BLE.iOS.Plugin plugin)

    {

    plugin.Load();

    }

    IBluetoothLE

    Get the bluetooth status

    var state = ble.State;

    You can also listen for State changes. So you can react if the user turns on/off bluetooth on you smartphone.

    ble.StateChanged += (s, e) =>

    {

    Debug.WriteLine($"The bluetooth state changed to {e.NewState}");

    };

    IAdapter

    Scan for devices

    adapter.DeviceDiscovered += (s,a) => deviceList.Add(a.Device);

    await adapter.StartScanningForDevicesAsync();

    ScanTimeout

    Set adapter.ScanTimeout to specify the maximum duration of the scan.

    ScanMode

    Set adapter.ScanMode to specify scan mode. It must be set before calling StartScanningForDevicesAsync(). Changing it while scanning, will not affect the current scan.

    Connect to device

    ConnectToDeviceAsync returns a Task that finishes if the device has been connected successful. Otherwise a DeviceConnectionException gets thrown.

    try

    {

    await _adapter.ConnectToDeviceAsync(device);

    }

    catch(DeviceConnectionException e)

    {

    // ... could not connect to device

    }

    Connect to known Device

    ConnectToKnownDeviceAsync can connect to a device with a given GUID. This means that if the device GUID is known, no scan is necessary to connect to a device. This can be very useful for a fast background reconnect.

    Always use a cancellation token with this method.

    On iOS it will attempt to connect indefinitely, even if out of range, so the only way to cancel it is with the token.

    On Android this will throw a GATT ERROR in a couple of seconds if the device is out of range.

    try

    {

    await _adapter.ConnectToKnownDeviceAsync(guid, cancellationToken);

    }

    catch(DeviceConnectionException e)

    {

    // ... could not connect to device

    }

    Get services

    var services = await connectedDevice.GetServicesAsync();

    or get a specific service:

    var service = await connectedDevice.GetServiceAsync(Guid.Parse("ffe0ecd2-3d16-4f8d-90de-e89e7fc396a5"));

    Get characteristics

    var characteristics = await service.GetCharacteristicsAsync();

    or get a specific characteristic:

    var characteristic = await service.GetCharacteristicAsync(Guid.Parse("d8de624e-140f-4a22-8594-e2216b84a5f2"));

    Read characteristic

    var bytes = await characteristic.ReadAsync();

    Write characteristic

    await characteristic.WriteAsync(bytes);

    Characteristic notifications

    characteristic.ValueUpdated += (o, args) =>

    {

    var bytes = args.Characteristic.Value;

    };

    await characteristic.StartUpdatesAsync();

    Get descriptors

    var descriptors = await characteristic.GetDescriptorsAsync();

    Read descriptor

    var bytes = await descriptor.ReadAsync();

    Write descriptor

    await descriptor.WriteAsync(bytes);

    Get System Devices

    Returns all BLE devices connected or bonded (only Android) to the system. In order to use the device in the app you have to first call ConnectAsync.

    For Android this function merges the functionality of thw following API calls:

    var systemDevices = adapter.GetSystemConnectedOrPairedDevices();

    foreach(var device in systemDevices)

    {

    await _adapter.ConnectToDeviceAsync(device);

    }

    Caution! Important remarks / API limitations

    The BLE API implementation (especially on Android) has the following limitations:

    Characteristic/Descriptor Write: make sure you call characteristic.WriteAsync(...) from the main thread, failing to do so will most probably result in a GattWriteError.

    Sequential calls: Always wait for the previous BLE command to finish before invoking the next. The Android API needs it's calls to be serial, otherwise calls that do not wait for the previous ones will fail with some type of GattError. A more explicit example: if you call this in your view lifecycle (onAppearing etc) all these methods return void and 100% don't quarantee that any await bleCommand() called here will be truly awaited by other lifecycle methods.

    Scan wit services filter: On specifically Android 4.3 the scan services filter does not work (due to the underlying android implementation). For android 4.3 you will have to use a workaround and scan without a filter and then manually filter by using the advertisement data (which contains the published service GUIDs).

    Best practice

    API

    Surround Async API calls in try-catch blocks. Most BLE calls can/will throw an exception in certain cases, this is especially true for Android. We will try to update the xml doc to reflect this.

    try

    {

    await _adapter.ConnectToDeviceAsync(device);

    }

    catch(DeviceConnectionException ex)

    {

    //specific

    }

    catch(Exception ex)

    {

    //generic

    }

    Avoid caching of Characteristic or Service instances between connection sessions. This includes saving a reference to them in you class between connection sessions etc. After a device has been disconnected all Service & Characteristic instances become invalid. Allways use GetServiceAsync and GetCharacteristicAsync to get a valid instance.

    General BLE iOS, Android

    Scanning: Avoid performing ble device operations like Connect, Read, Write etc while scanning for devices. Scanning is battery-intensive.

    try to stop scanning before performing device operations (connect/read/write/etc)

    try to stop scanning as soon as you find the desired device

    never scan on a loop, and set a time limit on your scan

    How to build the nuget package

    Build

    Open a console, change to the folder "xamarin-bluetooth-le/.build" and run cake.

    pack the nuget

    nuget pack Plugin.BLE.nuspec

    nuget pack MvvmCross.Plugin.BLE.nuspec

    Extended topics

    Useful Links

    How to contribute

    We usually do our development work on a branch with the name of the milestone. So please base your pull requests on the currently open development branch.

    Licence

    展开全文
  • Xamarin/Android 蓝牙搜索配对数据传输

    千次阅读 2019-02-27 10:09:56
    BluetoothAdapter(蓝牙适配器)、BluetoothDevice(蓝牙设备)、BluetoothSocket(蓝牙通讯)、BroadcastReceiver (广播接收器) 关键权限 BLUETOOTH(利用这个权限去执行蓝牙通信)、BLUETOOTH_PRIVILEGED(配对连接时...

    关键类

    BluetoothAdapter(蓝牙适配器)、BluetoothDevice(蓝牙设备)、BluetoothSocket(蓝牙通讯)、BroadcastReceiver (广播接收器)

    关键权限

    BLUETOOTH(利用这个权限去执行蓝牙通信)、BLUETOOTH_PRIVILEGED(配对连接时需要)、BLUETOOTH_ADMIN(让app拥有启动设备发现或操纵蓝牙设置,必须声明BLUETOOTH_ADMIN权限)

    注意:真机android版本6.0及以上使用蓝牙搜索需要开发权限ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION

    具体应用
    BluetoothAdapter(蓝牙适配器)
    BluetoothAdapter.DefaultAdapter(获取本机蓝牙适配器)
    IsEnabled:蓝牙状态(关闭/打开)
    BondedDevices:获取已经配对过的蓝牙设备列表
    IsDiscovering:是否发现蓝牙设备

    Enable():打开蓝牙
    Disable():关闭蓝牙
    StartDiscovery():开始发现蓝牙
    CancelDiscovery():取消发现蓝牙
    GetRemoteDevice(address);获取远程设备-对方蓝牙

    BluetoothDevice(蓝牙设备)
    UUID uuid = UUID.FromString(“00001101-0000-1000-8000-00805F9B34FB”);
    方法
    CreateInsecureRfcommSocketToServiceRecord(uuid):创建通讯通道

    BluetoothSocket(蓝牙通讯)
    Socket = device.CreateInsecureRfcommSocketToServiceRecord(uuid);
    方法:
    Connect():连接蓝牙
    Close():关闭蓝牙连接
    属性:
    IsConnected:蓝牙连接状态
    InputStream:读取输入数据
    OutputStream:传出输出数据

    BroadcastReceiver (广播接收器)
    继承广播接收器,进行重新OnReceive ()方法,用于接收广播信息(蓝牙)

    实现蓝牙设备监听
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 蓝牙打印Xamarin 取自Xamarin android示例和 在GOOJPRT PT-210上测试 另一个样品
  • 请记住,Xamarin绑定到本机api所以不要担心某些“与本机方式有关”;)基于你引用的anwser我编写并测试了下面的代码 . 我希望它会对你有所帮助 .class btListener : Java.Lang.Object, ...

    请记住,Xamarin绑定到本机api所以不要担心某些“与本机方式有关”;)基于你引用的anwser我编写并测试了下面的代码 . 我希望它会对你有所帮助 .

    class btListener : Java.Lang.Object, IBluetoothProfileServiceListener

    {

    public void OnServiceConnected([GeneratedEnum] ProfileType profile, IBluetoothProfile proxy)

    {

    String deviceName = "JABRA WAVE+";

    BluetoothDevice result = null;

    var devices = BluetoothAdapter.DefaultAdapter.BondedDevices;

    if (devices != null)

    {

    foreach (BluetoothDevice device in devices)

    {

    if (deviceName == device.Name)

    {

    result = device;

    break;

    }

    }

    }

    var connect = Java.Lang.Class.FromType(typeof(BluetoothA2dp)).GetDeclaredMethod("connect", Java.Lang.Class.FromType(typeof(BluetoothDevice)));

    connect.Invoke((Java.Lang.Object)proxy, result);

    }

    public void OnServiceDisconnected([GeneratedEnum] ProfileType profile)

    {

    }

    }

    以下代码如下OnCreate功能:

    btListener btReceiver = new btListener();

    BluetoothAdapter.DefaultAdapter.GetProfileProxy(this, btReceiver, ProfileType.A2dp);

    只是看了一下日期..但我还是张贴了答案 - 也许它仍然会帮助某人

    展开全文
  • VS2019 Xamarin.Android开发蓝牙通讯

    千次阅读 2019-12-18 19:22:33
    注意:不要选成移动应用xamarin.Forms要选android应用(Xamarin)xamarin.Forms 和Xamarin.Android还是有区别的。小项目就用Xamarin.Android就好了 选择空白模板 作为通讯App 必定需要 Server端 所以我们在这里在...

    第一步

    新建项目

    注意:不要选成移动应用xamarin.Forms要选android应用(Xamarin) xamarin.Forms 和 Xamarin.Android还是有区别的。小项目就用Xamarin.Android就好了

    选择空白模板

    作为通讯App 必定需要 Server端 所以我们在这里在新建一个Client端 原本的app1项目作为server端

    在解决方案上右键 添加新的项目

    继续选 Android 应用

    起名字叫app1Client

    继续选空白模板

    OK到这里第一步建立项目就完成了

    下一步我们将开始配置项目了。

     

     

    第二步

    配置项目

    Android在使用蓝牙时需要添加4个权限

    在app1项目上 右键属性 Android清单 内找到 所需权限 勾选

    BLUETOOTH(利用这个权限去执行蓝牙通信)

    BLUETOOTH_PRIVILEGED(配对连接时需要)

    BLUETOOTH_ADMIN(让app拥有启动设备发现或操纵蓝牙设置,必须声明BLUETOOTH_ADMIN权限)

    注意:真机android版本6.0及以上使用蓝牙搜索需要开发权限ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION

    将App1 和 App1Client 2个项目都添加上述权限

    第三步 编写代码

    怎么添加界面和按钮一类的我就不详细写了 这里主要写怎么实现通讯的部分

    1.获得蓝牙设备 这需要用到 BluetoothAdapter 这个类 

    private readonly BluetoothAdapter localAdapter; 
    localAdapter = BluetoothAdapter.DefaultAdapter;

    localAdapter 就是默认蓝牙适配器了

    BluetoothAdapter 类 提供了 蓝牙适配器的状态 以及打开蓝牙 关闭蓝牙等一些方法 具体内容请自己点进该类查看

    2获取建立服务端的监听和通讯线程

    我先写下思路 我们首先需要一个线程来监听是否有客户端来请求建立连接

    如果建立连接成功就去建立一个通讯线程来读取Client端发来的数据..是不是很简单

    下面我们来是实现

    监听线程方法

    //在你想要启动监听线程的地方添加这个线程
    Thread t = new Thread(Monitor); 
    t.Start();
    
    public void Monitor()
            {
                BluetoothServerSocket serverSock = localAdapter.ListenUsingRfcommWithServiceRecord("Bluetooth", Java.Util.UUID.FromString("0000-0000-0000-0000-1234567"));
                BluetoothSocket sock = null;
                while (true)
                {
                    try
                    {
                        sock = serverSock.Accept();
                    }
                    catch (System.Exception)
                    {
                    }
                    Thread t = new Thread(Connected);
                    t.Start(sock);
                }

    核心方法 localAdapter.ListenUsingRfcommWithServiceRecord

            //
            // 摘要:
            //     Create a listening, secure RFCOMM Bluetooth socket with Service Record.
            //
            // 参数:
            //   name:
            //     service name for SDP record
            //
            //   uuid:
            //     uuid for SDP record
            //
            // 返回结果:
            //     To be added.
            //
            // 异常:
            //   T:Java.IO.IOException:
            //     on error, for example Bluetooth not available, or insufficient permissions, or
            //     channel in use.
            //
            // 言论:
            //     Portions of this page are modifications based on work created and shared by the
            //     Android Open Source Project and used according to terms described in the Creative
            //     Commons 2.5 Attribution License.
            [Register("listenUsingRfcommWithServiceRecord", "(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;", "")]
            public BluetoothServerSocket ListenUsingRfcommWithServiceRecord(string name, UUID uuid);

    public BluetoothServerSocket ListenUsingRfcommWithServiceRecord(string name, UUID uuid); 该方法 需要个一个连接名称和一个 UUID 并返回一个BluetoothServerSocket 对象 如果你会Socket的话接下来就很简单了。

    BluetoothServerSocket 类提供了几个建立连接的方法

    Accept()方法返回了一个BluetoothSocket对象

    BluetoothSocket 类提供了蓝牙适配输入输出流的操作

    public Stream OutputStream { get; } //输入流 读操作使用该流
    public Stream InputStream { get; } //输出流 写操作使用该流
    public BluetoothDevice RemoteDevice { get; } //远程设备属性

    接下来我们要实现通讯线程

                    Thread t = new Thread(Connected);
                    t.Start(sock);

    当建立连接成功 执行该代码来新建一个通讯线程 

    由于通讯线程需要该连接的套接字 所以我们要把建立连接成功后的套接字作为参数传递到线程函数内

    通讯线程方法

            public void Connected(object sock)
            {
                BluetoothSocket mSock = (BluetoothSocket)sock;
                byte[] rebuf = new byte[1024];         
                while (true)
                {
                    int len =  mSock.InputStream.Read(rebuf,0, rebuf.Length);
    
                    if (len > 0)
                    {
                        byte[] rebuf2 = new byte[len];
                        Array.Copy(rebuf, 0, rebuf2, 0, len);
                        string str = System.Text.Encoding.ASCII.GetString(rebuf2);
                        Toast.MakeText(this, str, ToastLength.Short).Show();
    
                    }
                    Thread.Sleep(100);
                    
                }

    由于线程启动时传递的参数只能是Object对象所以先将 Object对象转换为BluetoothSocket 对象  BluetoothSocket mSock = (BluetoothSocket)sock;

    然后我们在新建一个缓冲区 用来读取数据 由于我们现在还不知道将要读取的数据有多大。我们可以先建立一个和蓝牙读取缓冲区大小一样的byte数组 byte[] rebuf = new byte[1024]; 当然我这里只用了1KB 蓝牙的读取缓冲区默认好像是4KB 

    接下来我们就每100毫秒区读一下是否有数据 当然你可以用更快的速度来读取如果你一个包的大小很小的话

    //
            // 摘要:
            //     当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。
            //
            // 参数:
            //   buffer:
            //     字节数组。 当此方法返回时,此缓冲区包含指定的字符数组,此数组中 offset 和 (offset + count - 1) 之间的值被从当前源中读取的字节所替换。
            //
            //   offset:
            //     buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。
            //
            //   count:
            //     要从当前流中最多读取的字节数。
            //
            // 返回结果:
            //     读入缓冲区中的总字节数。 如果很多字节当前不可用,则总字节数可能小于请求的字节数;如果已到达流结尾,则为零 (0)。
            //
            // 异常:
            //   T:System.ArgumentException:
            //     offset 和 count 的总和大于缓冲区长度。
            //
            //   T:System.ArgumentNullException:
            //     buffer 为 null。
            //
            //   T:System.ArgumentOutOfRangeException:
            //     offset 或 count 为负数。
            //
            //   T:System.IO.IOException:
            //     出现 I/O 错误。
            //
            //   T:System.NotSupportedException:
            //     流不支持读取。
            //
            //   T:System.ObjectDisposedException:
            //     在流关闭后调用方法。
            public abstract int Read(byte[] buffer, int offset, int count);
    
    
            int len =  mSock.InputStream.Read(rebuf,0, rebuf.Length);

    Read方法返回一个int 类型的对象 表示读到的数据长度

    如果数据长度 > 0

    我们就可以解析了

    byte[] rebuf2 = new byte[len];                   
    Array.Copy(rebuf, 0, rebuf2, 0, len);
    string str = System.Text.Encoding.ASCII.GetString(rebuf2);
    
    

    新建一个 读取到长度大小的byte数组 将读到的数据拷贝到新的数组内进行解析。到这一步 一个最基础的服务端就完成了

    To be continued .......

    下集预告:明天我们将讲解如何写一个客户端来与服务端建立连接

     

     

    -------------------------------------------------------------------------------------------------

    本想把客户端的也好好写一篇。可惜工作太忙时间有限。

    我把源码放出来。。

    https://download.csdn.net/download/qq_37290697/12040599

    有需求的自己下载吧

    展开全文
  • 怎么获取本地的蓝牙适配器对象 2.获取适配器以后,怎么扫描附近蓝牙设备 3.怎么与外部蓝牙设备进行连接 4.怎么与配对的外部蓝牙设备进行数据的交互 关于这方面的资料也不多,真的是遇到瓶颈了。望各位...
  • 请发表评论 #274: ) 谢谢 用于 Xamarin蓝牙LE插件 用于访问蓝牙功能的Xamarin和MvvMCross插件。 插件是松散的基于BLE实现的猴机器人。重要注意: with"香草",我们指的是非 mvvmcross/pure Xamarin版本。 你可以...
  • 形式创建一个界面public interface IBLEPrint{void BlePrint();}在Android项目中实施...using xxxusing Xamarin.Forms;using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;//using ...[assembly: Dependen...
  • 蓝牙Xamarin.Forms 1.3.1 的跨平台蓝牙 API
  • Xamarin.Android Bluetooth 简单介绍了Xamarin.Android蓝牙连接的方法。
  • 这是使用 Xamarin 构建的 android 应用程序,能够使用蓝牙控制远程 PC。 这可用于多种场景,包括用于 Microsoft PowerPoint 演示文稿的 PPT 控制器或任何其他基于 Web 的演示文稿控制器,如reveal.js 或 impress.js...
  • Xamarin Android移动开发蓝牙打印编码报错:Encoding 936 data could not be found. Make sure you have correct international codeset assembly installed and enabled.Encoding 54936 data could not be found. ...
  • 更新-该库将通过转移到Shiny框架。支持将一直保留到Shiny超出beta版本为止 ACRReact式BluetoothLE插件 易于使用的跨平台,适用于所有平台... 打开蓝牙设置屏幕 持久连接 处理Android线程和缺陷头痛 发现服务,特征和描
  • 随着Xamarin.Form项目接近尾声,仔细一算才发现过来大半年时间了。 期间除了刚开始有闲情写写,现在总算有空来总结一下了。 来先说 Plugin.BLE (https://github.com/xabre/xamarin-bluetooth-le),在NuGet里搜索...
  • I am developing a cross platform app using Xamarin forms.I have an ObserveableCollection and I want to populate it with bluetooth devices that have been found during a search.The search is/has to be p...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 221
精华内容 88
关键字:

xamarin蓝牙