Flutter无人机ID管理插件flutter_opendroneid的使用
Flutter无人机ID管理插件flutter_opendroneid的使用

flutter_opendroneid
一个用于通过原生Android和iOS平台特定实现读取Wi-Fi和蓝牙远程ID广告的Flutter插件。数据格式定义在《ASTM F3411》远程ID和《ASD-STAN prEN 4709-002》直接远程ID规范中。
平台特定实现从Wi-Fi和蓝牙远程ID广告中读取原始消息字节。然后将带有元数据的原始负载通过事件通道传递到Dart端。使用《Dart-opendroneid库》解析原始数据为远程ID消息。
《Pigeon库》用于定义平台主机和Flutter客户端之间的消息协议。消息协议定义在《schema.dart》文件中。
原生代码架构受到《OpenDroneID Android接收器应用》的启发。
预备条件
- Flutter 3.16.7或更新版本
开始使用
这个项目是一个Flutter插件包,包含用于Android和/或iOS的平台特定实现代码。
有关如何开始使用Flutter的更多信息,请参阅在线文档,该文档提供了教程、示例、移动开发指南以及完整的API引用。
开发中
⚠️ 尽管我们公开发布此库是为了允许《Drone Scanner》作为开源发布,但我们仍对这个仓库的状态不满意,缺少文档和贡献指南。敬请期待,我们正在努力改进。
安装
- 使用
flutter pub get
安装项目 - 运行
scripts/pigeon_generate.sh
脚本生成Pigeon类
设置权限
启用扫描周围环境以获取Wi-Fi和蓝牙远程ID广告需要设置权限。应用程序必须请求所需的权限,插件仅检查权限是否已授予。如果缺少某些权限,插件将在尝试启动扫描时抛出PermissionsMissingException
。可以使用例如《permission handler包》来请求权限。
Android设置
Android允许同时进行Wi-Fi和蓝牙扫描。蓝牙扫描需要蓝牙和蓝牙扫描权限。自Android 12(API级别31)起,蓝牙扫描还需要位置权限。 请查看《蓝牙权限文档》。
Wi-Fi扫描需要位置权限直到版本12(API级别31),自版本13起,需要附近的Wi-Fi设备权限。 请查看《Wi-Fi权限文档》。
权限需要添加到AndroidManifest.xml
文件中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dronescanner_prototype">
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission
android:name="android.permission.NEARBY_WIFI_DEVICES"
android:usesPermissionFlags="neverForLocation" />
</manifest>
iOS设置
iOS不允许Wi-Fi扫描,只能进行蓝牙扫描。蓝牙权限是必需的。除了请求权限外,还需要将其添加到Info.plist
。
- 添加
NSBluetoothAlwaysUsageDescription key
到Info.plist
,类型为string
。可以使用任何描述,例如代码片段中的描述。它将在请求权限时显示在对话框中。
<dict>
...
<key>NSBluetoothAlwaysUsageDescription</key>
<string>该应用程序需要蓝牙权限以从附近飞机获取数据。</string>
...
</dict>
permission handler
需要在Podfile
中设置宏。将PERMISSION_BLUETOOTH
设置为1。
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.bluetooth
'PERMISSION_BLUETOOTH=1',
]
end
end
end
更多关于Flutter无人机ID管理插件flutter_opendroneid的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter无人机ID管理插件flutter_opendroneid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
关于Flutter无人机ID管理插件flutter_opendroneid
的使用,下面是一个简单的代码示例,展示了如何在Flutter项目中集成和使用该插件进行无人机ID的管理。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_opendroneid
依赖:
dependencies:
flutter:
sdk: flutter
flutter_opendroneid: ^x.y.z # 替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_opendroneid
插件:
- 导入插件:
在你的Dart文件中(例如main.dart
),导入flutter_opendroneid
插件:
import 'package:flutter_opendroneid/flutter_opendroneid.dart';
- 初始化插件:
通常,你会在应用的入口点(如main.dart
)初始化插件。这里是一个简单的初始化示例:
void main() {
WidgetsFlutterBinding.ensureInitialized();
FlutterOpenDroneID.instance.initialize();
runApp(MyApp());
}
- 使用插件功能:
以下是一个示例,展示了如何使用插件的某些功能,比如注册无人机ID。请注意,具体API可能因插件版本而异,请参考官方文档获取最新信息。
import 'package:flutter/material.dart';
import 'package:flutter_opendroneid/flutter_opendroneid.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
FlutterOpenDroneID.instance.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter OpenDroneID Example'),
),
body: Center(
child: DroneIDManagement(),
),
),
);
}
}
class DroneIDManagement extends StatefulWidget {
@override
_DroneIDManagementState createState() => _DroneIDManagementState();
}
class _DroneIDManagementState extends State<DroneIDManagement> {
String droneID = '';
String registrationStatus = '';
void registerDroneID() async {
// 假设有一个无人机ID
String newDroneID = '1234567890ABCDEF';
try {
bool success = await FlutterOpenDroneID.instance.registerDroneID(newDroneID);
setState(() {
droneID = newDroneID;
registrationStatus = success ? 'Registration Successful' : 'Registration Failed';
});
} catch (e) {
setState(() {
registrationStatus = 'Error: ${e.message}';
});
}
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Drone ID: $droneID'),
Text(registrationStatus),
ElevatedButton(
onPressed: registerDroneID,
child: Text('Register Drone ID'),
),
],
);
}
}
注意:
- 上述代码是一个简化的示例,实际使用中可能需要处理更多的错误情况和边界情况。
FlutterOpenDroneID.instance.registerDroneID
是一个假设的方法名,实际插件可能提供不同的API来注册无人机ID。请参考插件的官方文档来获取正确的API使用方法和参数。- 由于无人机ID管理可能涉及敏感信息和法规要求,请确保你的应用符合所有相关的法律和监管要求。
希望这个示例能帮助你开始在Flutter项目中使用flutter_opendroneid
插件。如果你有更具体的需求或遇到问题,请查阅插件的官方文档或寻求社区的帮助。