win_ble パッケージは、Windows および純粋な Dart プロジェクトを対象とした Flutter アプリケーションで Bluetooth Low Energy (BLE) 機能を有効にします。Windows 専用に設計されており、ネイティブ BLE 機能へのブリッジを提供し、開発者がデバイスを検出したり、ペリフェラルに接続したり、特性の読み書きや BLE 操作の管理が可能になります。このプラグインは、Windows プラットフォーム上で BLE デバイスとの低消費電力無線通信が必要なアプリケーションに最適です。プラットフォームチャネルを通じて Windows Bluetooth API を活用しており、Flutter エコシステム内での信頼性の高いパフォーマンスを実現しています。
Use the WinBle plugin to enable Bluetooth Low Energy in Flutter Windows and pure Dart projects (Windows only)
Usage
First initialize WinBle, to initialize on Flutter Windows, get server path using await WinServer.path, and for pure dart projects ( Windows only ) Download BleServer.exe file and place in the same folder, checkout example_dart for more details
// To initialize on Flutter WindowsawaitWinBle.initialize(serverPath: awaitWinServer.path());
// For pure dart projectsawaitWinBle.initialize(serverPath: "Path of BLEServer.exe file");
Dispose WinBle after using
WinBle.dispose();
To Start Scan
WinBle.startScanning();
StreamSubscription? scanStream = WinBle.scanStream.listen((event) {
// Get Devices Here
});
To Stop Scan
WinBle.stopScanning();
scanStream?.cancel();
To Connect
// To ConnectawaitWinBle.connect(address);
// Get Connection Updates HereStreamSubscription _connectionStream =
WinBle.connectionStreamOf(device.address).listen((event) {
// event will be a boolean , in which// true => Connected// false => Disconnected
});
To Disconnect
awaitWinBle.disconnect(address);
To get MaxMtuSize
awaitWinBle.getMaxMtuSize(address);
Handle Bluetooth radio
// To get rdaio statusWinBle.getBluetoothState();
// To get updates of radio stateWinBle.bleState.listen((BleState state) {
// Get BleState (On, Off, Unknown, Disabled, Unsupported)
});
// To turn on radioWinBle.updateBluetoothState(true);
// To turn off radioWinBle.updateBluetoothState(false);
Pairing Options
// To PairawaitWinBle.pair(address);
// To UnPairawaitWinBle.unPair(address);
// To Check if Device can be Pairedbool canPair = awaitWinBle.canPair(address);
// To Check if Device is Already Pairedbool isPaired = awaitWinBle.isPaired(address);
Rest All Methods are
// To Get Servicesvar services = awaitWinBle.discoverServices(address);
// To Get CharacteristicList<BleCharacteristic> bleCharacteristics = awaitWinBle.discoverCharacteristics(address: address, serviceId: serviceID);
// To Read CharacteristicList<int> data = awaitWinBle.read(address: address, serviceId: serviceID, characteristicId: charID);
// To Write CharacteristicawaitWinBle.write( address: address, service: serviceID, characteristic: charID, data: data, writeWithResponse: writeWithResponse);
// To Start SubscriptionawaitWinBle.subscribeToCharacteristic(address: address, serviceId: serviceID, characteristicId: charID);
// To Stop SubscriptionawaitWinBle.unSubscribeFromCharacteristic(address: address, serviceId: serviceID, characteristicId: charID);
// Get Characteristic Value Updates HereStreamSubscription _characteristicValueStream = WinBle.characteristicValueStream.listen((event) {
// Here We will Receive All Characteristic Events
});
Note
Requires Windows version >= 10.0.15014
If windows release build opens cmd while running app, try this
Edit your /windows/runner/main.cpp file, this is a known flutter issue
if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()){
CreateAndAttachConsole();
}
// Add this Code// <------- From Here --------- >else{
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi = {0};
WCHAR lpszCmd[MAX_PATH] = L"cmd.exe";
if (::CreateProcess(NULL, lpszCmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE | CREATE_NO_WINDOW, NULL, NULL, &si, &pi))
{
do
{
if (::AttachConsole(pi.dwProcessId))
{
::TerminateProcess(pi.hProcess, 0);
break;
}
} while (ERROR_INVALID_HANDLE == GetLastError());
::CloseHandle(pi.hProcess);
::CloseHandle(pi.hThread);
}
}
// <------- UpTo Here --------- >