Flutter反向信标插件reverse_beacon的使用
Flutter反向信标插件reverse_beacon的使用
reverse_beacon
是一个简单的 Dart 库,用于将反向信标(Reverse Beacon)的telnet CW和DIGI服务器转换为可控广播流。该库旨在客户端应用程序中使用,因此暴露了异常类型。
反向信标
反向信标网络(Reverse Beacon Network,简称 RBN)是一个由业余无线电爱好者运行的分布式信标网络,用于监测世界各地的CW和FT8信号强度。通过使用此库,你可以轻松地从这些服务器获取实时数据。
- 反向信标网址: https://www.reversebeacon.net/
- 支持他们 如果你能够的话。
使用方法
以下是一个简单的示例,展示如何使用 reverse_beacon
插件来连接到反向信标服务器并监听信号。
示例代码
import 'dart:io';
import 'package:reverse_beacon/reverse_beacon.dart';
import 'package:reverse_beacon/src/cw_spot.dart';
void main() async {
var rb = ReverseBeacon();
try {
// 连接到反向信标服务器,传入你的呼号
await rb.connect(callsign: 'n1bri');
} on TelnetCommunicationException catch (_) {
// 处理通信异常
print('Telnet Communication Exception');
exit(-1);
} on InvalidCallsignException catch (_) {
// 处理无效呼号
print('Invalid callsign');
exit(-1);
} catch (ex) {
// 处理其他未知错误
print('unknown issue');
exit(-1);
}
int spotCount = 0;
// 监听信号
var subscription = rb.listen((spot) {
// 筛选条件
if (spotCount < 5) {
if (spot.band == Band.meters20 && spot.mode == Mode.cw) {
if ((spot as CWSpot).wpm >= 15) {
print(spot);
spotCount++;
}
}
} else if (spotCount >= 5) {
if (spot.band == Band.meters20 && spot.mode == Mode.ft8) {
print(spot);
spotCount++;
}
}
// 当接收到10个符合条件的信号时关闭连接
if (spotCount == 10) {
rb.close();
}
});
// 在某些情况下暂停和恢复订阅
if (spotCount > 15) {
subscription.pause();
await Future.delayed(Duration(seconds: 1));
subscription.resume();
subscription.cancel();
rb.close();
}
}
输出示例
skimmer: DL8TG, spotted: UD4D, wpm: 31, mode: Mode.cw , band: Band.meters20, freq: 14014.0 KHz, [@11](/user/11):35 , snr: 13, type: SpotType.cq
skimmer: HA8TKS, spotted: DL7DAX, wpm: 31, mode: Mode.cw , band: Band.meters20, freq: 14052.5 KHz, [@11](/user/11):35 , snr: 19, type: SpotType.cq
skimmer: DR4W, spotted: UD4D, wpm: 32, mode: Mode.cw , band: Band.meters20, freq: 14014.0 KHz, [@11](/user/11):35 , snr: 15, type: SpotType.cq
skimmer: IK4VET, spotted: DL7DAX, wpm: 31, mode: Mode.cw , band: Band.meters20, freq: 14052.5 KHz, [@11](/user/11):35 , snr: 16, type: SpotType.cq
skimmer: OG66X, spotted: UD4D, wpm: 32, mode: Mode.cw , band: Band.meters20, freq: 14014.0 KHz, [@11](/user/11):35 , snr: 10, type: SpotType.cq
skimmer: VU2CPL, spotted: JA2JKE, gridsquare: PM84, mode: Mode.ft8 , band: Band.meters20, freq: 14074.0 KHz, [@11](/user/11):35 , snr: -17, type: SpotType.cq
skimmer: VU2CPL, spotted: JF2RYX, gridsquare: N/A, mode: Mode.ft8 , band: Band.meters20, freq: 14074.0 KHz, [@11](/user/11):35 , snr: -19, type: SpotType.cq
skimmer: NG7M, spotted: W8UPI, gridsquare: EM85, mode: Mode.ft8 , band: Band.meters20, freq: 14074.0 KHz, [@11](/user/11):35 , snr: 0, type: SpotType.cq
skimmer: S50U, spotted: PD4SN, gridsquare: JO32, mode: Mode.ft8 , band: Band.meters20, freq: 14074.0 KHz, [@11](/user/11):35 , snr: -12, type: SpotType.cq
skimmer: S50U, spotted: PG7R, gridsquare: N/A, mode: Mode.ft8 , band: Band.meters20, freq: 14074.0 KHz, [@11](/user/11):35 , snr: -13, type: SpotType.cq
Exited.
更多关于Flutter反向信标插件reverse_beacon的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter反向信标插件reverse_beacon的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
关于Flutter中的反向信标插件 reverse_beacon
的使用,这里提供一个简单的示例代码来展示如何集成和使用该插件。请注意,由于 reverse_beacon
并非一个广为人知的插件,因此假设其功能类似于常见的反向通信或信标广播功能。实际使用时,请根据插件的具体文档进行调整。
首先,确保在 pubspec.yaml
文件中添加对该插件的依赖(假设插件名为 reverse_beacon
,并且已经发布到 Pub):
dependencies:
flutter:
sdk: flutter
reverse_beacon: ^x.y.z # 替换为实际版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在 Dart 代码中集成并使用该插件。以下是一个简单的示例,展示如何初始化插件并发送反向信标数据:
import 'package:flutter/material.dart';
import 'package:reverse_beacon/reverse_beacon.dart'; // 假设插件的导入路径是这样的
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: BeaconPage(),
);
}
}
class BeaconPage extends StatefulWidget {
@override
_BeaconPageState createState() => _BeaconPageState();
}
class _BeaconPageState extends State<BeaconPage> {
ReverseBeacon? _beacon;
String _status = "Not Initialized";
@override
void initState() {
super.initState();
_initializeBeacon();
}
Future<void> _initializeBeacon() async {
// 初始化插件
_beacon = ReverseBeacon();
// 假设有一个方法开始发送信标数据
try {
await _beacon!.startBeacon("MyBeaconData");
setState(() {
_status = "Beacon Started";
});
} catch (e) {
setState(() {
_status = "Failed to Start Beacon: ${e.message}";
});
}
}
Future<void> _stopBeacon() async {
if (_beacon != null) {
try {
await _beacon!.stopBeacon();
setState(() {
_status = "Beacon Stopped";
});
} catch (e) {
setState(() {
_status = "Failed to Stop Beacon: ${e.message}";
});
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Reverse Beacon Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Status: $_status',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _stopBeacon,
child: Text('Stop Beacon'),
),
],
),
),
);
}
}
在这个示例中:
- 在
pubspec.yaml
中添加了reverse_beacon
插件的依赖。 - 在
MyApp
中创建了BeaconPage
,这是应用的主页面。 - 在
BeaconPage
的initState
方法中初始化了ReverseBeacon
插件,并尝试开始发送信标数据。 - 提供了一个按钮来停止信标广播,并更新状态以反映当前状态。
请注意,上述代码是基于假设的插件接口和功能编写的。实际使用时,你需要参考 reverse_beacon
插件的官方文档来了解其具体的API和用法。如果插件尚未发布或文档不完整,可能需要联系插件的开发者或查看源代码来了解更多信息。