flutter_nearby_connections를 통해 블루투스 통신을 진행하다
블루투스로 PvP를 만들었어요.
얼마 전에 컴퓨터 기사들이 맞서 싸우는 컴퓨터 앱을 내놓았다.PvP 기능으로 블루투스 통신.그때 사용한 라이브러리는 flutter_nearby_connections의 라이브러리입니다.
flutter_nearby_connections
그럼 제가 설명해 드릴게요
flutter_nearby_connections
.DeviceType
DeviceType을 적절하게 정의합니다.
advertiser
와 browser
는 이번에 1:1로 연결되었다.flutter_nearby_connections
자체는 1:N이 될 수 있다.enum ConnectionDeviceType {
advertiser,
browser
}
NearbyService
NearbyService
는 블루투스 연결을 하는 서비스입니다.1. 초기화
지정된 서비스 이름(임의의 이름), 장치 정보 및 연결 방법을 초기화합니다.
// NearbyService の生成.
_nearbyService = NearbyService();
// deviceName の取得.
String devInfo = '';
final deviceInfoPlugin = DeviceInfoPlugin();
if (Platform.isAndroid) {
final androidInfo = await deviceInfoPlugin.androidInfo;
devInfo = androidInfo.model;
} else if (Platform.isIOS) {
final iosInfo = await deviceInfoPlugin.iosInfo;
devInfo = iosInfo.localizedModel;
}
_nearbyService?.init(
serviceType: SERVICE_NAME,
deviceName: devInfo,
strategy: Strategy.P2P_POINT_TO_POINT, // 今回は 1:1 の接続.
callback: (isRunning) async {
if (isRunning) {
// この辺りはサンプルプログラムそのまま・・・.
switch (_deviceType) {
case ConnectionDeviceType.browser:
await _nearbyService?.stopBrowsingForPeers();
await Future.delayed(Duration(microseconds: 200));
await _nearbyService?.startBrowsingForPeers();
break;
case ConnectionDeviceType.advertiser:
await _nearbyService?.stopAdvertisingPeer();
await _nearbyService?.stopBrowsingForPeers();
await Future.delayed(Duration(microseconds: 200));
await _nearbyService?.startAdvertisingPeer();
await _nearbyService?.startBrowsingForPeers();
break;
}
}
}
);
2.보내다
발송은
sendMessage
에서 진행됩니다.void sendCommand(Device device, String data) {
_nearbyService?.sendMessage(device.deviceId, data);
}
3. 이벤트 감지
초기화하면 이벤트가 감지됩니다.
_subscriptions.addAll(
[
// 接続可能なデバイスのリストを検知した時(デバイスのリストに変化があったとき).
_nearbyService!.stateChangedSubscription(callback: (devicesList) {
devicesList.forEach((element) {
print(" deviceId: ${element.deviceId} | deviceName: ${element.deviceName} | state: ${element.state}");
if (Platform.isAndroid) {
if (element.state == SessionState.connected) {
_nearbyService?.stopBrowsingForPeers();
} else {
_nearbyService?.startBrowsingForPeers();
}
}
});
final connectedDevice = devicesList.firstWhereOrNull((d) => d.state == SessionState.connected);
// 各 Subject で状態を送信する.
_sessionState.add(connectedDevice != null ? SessionState.connected : SessionState.notConnected);
_devices.add(devicesList);
_connectedDevice.add(connectedDevice);
}),
// データを受信したとき.
_nearbyService!.dataReceivedSubscription(callback: (data) {
final String receiveData = data['message'];
final command = receiveData.split(',');
command.removeWhere((element) => element.isEmpty);
if (command.isEmpty) return;
// この辺りは省略しますが、
// 受信したデータをパースして、パースしたデータを各 Subject で送信します。
})
]
);
4. 연결 종료
DisConnect 를 잊지 마십시오.
void disConnect(Device device) {
_nearbyService?.disconnectPeer(deviceID: device.deviceId);
}
NearbyService
의 블루투스 통신은 이런 느낌이다.이렇게 번거롭게 실현할 수 있으니 정말 편리한 프로그램 라이브러리다.
다만, iOS와 안드로이드 간에만 통신이 가능한 것 같습니다.거기를 주의하세요.
또 블루투스 통신 자체가 안정적이지 않다고 생각하기 때문에 통신 횟수를 조절하는 데 공을 들이는 것이 좋다.
끝맺다
이번에는 플루터로 블루투스 통신을 하는 방법을 소개했다.
블루투스 통신은 혼자 하면 귀찮아서 정말 좋은 프로그램 라이브러리라고 생각해요!
소개하다.
이번 팁스는 내가 집필한 기술서적전플루터로 만든 앱과 게임의 융합~ 계산기 기사의 개발 팁~에도 실렸다.
이 책은 플utter에 여러 가지 이상한 계산기 개발 팁을 실었다.무료니까 가능하면 다운로드하세요.
앱 자체도 무료로 공개된다.
Reference
이 문제에 관하여(flutter_nearby_connections를 통해 블루투스 통신을 진행하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/asteroid/articles/f07243b3d9bb70텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)