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》作为开源发布,但我们仍对这个仓库的状态不满意,缺少文档和贡献指南。敬请期待,我们正在努力改进。

安装

  1. 使用flutter pub get安装项目
  2. 运行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 keyInfo.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

1 回复

更多关于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插件:

  1. 导入插件

在你的Dart文件中(例如main.dart),导入flutter_opendroneid插件:

import 'package:flutter_opendroneid/flutter_opendroneid.dart';
  1. 初始化插件

通常,你会在应用的入口点(如main.dart)初始化插件。这里是一个简单的初始化示例:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  FlutterOpenDroneID.instance.initialize();
  runApp(MyApp());
}
  1. 使用插件功能

以下是一个示例,展示了如何使用插件的某些功能,比如注册无人机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插件。如果你有更具体的需求或遇到问题,请查阅插件的官方文档或寻求社区的帮助。

回到顶部