Flutter华为近距离服务插件huawei_nearbyservice的使用

Flutter华为近距离服务插件huawei_nearbyservice的使用


华为近距离服务Flutter插件

pub.dev版本

华为近距离服务允许设备在不连接互联网的情况下轻松发现附近的设备,并通过蓝牙和Wi-Fi等技术建立通信。该插件提供了由华为近距离服务SDK提供的近距离连接和消息传递API。

功能概述

  • 近距离连接

    • 发现设备并与其建立安全的通信通道,传输字节数组、文件和流;支持无缝的近距离互动,如多人游戏、实时协作、资源广播和内容共享。
  • 近距离消息传递

    • 允许附近连接到互联网的设备之间发布和订阅消息。订阅者(应用)可以根据发布者(信标或其他应用)广播的分享码从云服务获取消息内容。

安装 #

请参阅pub.devAppGallery Connect配置


开发指南 #


问题或反馈 #

如果你有关于如何使用华为移动服务示例的问题,请尝试以下选项:

  • Stack Overflow 是任何编程问题的最佳去处。请务必使用标签 huawei-mobile-services 标记你的问题。
  • GitHub 是这些插件的官方仓库,你可以在其中提交问题或提出建议。
  • 华为开发者论坛 HMS Core模块非常适合一般性问题,或者寻求建议和意见。
  • 华为开发者文档 是所有华为核心工具包的官方文档,你可以在那里找到详细的文档。

如果你在我们的示例中遇到任何错误,请提交一个GitHub问题到HMS-Core/hms-flutter-plugin仓库。


许可证 #

华为近距离服务Flutter插件在Apache 2.0许可证下授权。


完整示例代码

/*
    版权所有 2020-2024 华为技术有限公司。保留所有权利。

    根据Apache许可证2.0版(“许可证”)许可;
    除非符合许可证,否则不得使用此文件。
    您可以获取许可证的副本:

        https://www.apache.org/licenses/LICENSE-2.0

    除非适用法律要求或书面同意,否则根据许可证分发的软件
    按“原样”分发,不附带任何明示或暗示的保证,
    包括但不限于适销性和特定用途适用性的默示保证。
    有关详细信息,请参阅许可证。
*/

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:huawei_nearbyservice_example/pages/discovery_transfer_page.dart';
import 'package:huawei_nearbyservice_example/pages/message_page.dart';
import 'package:huawei_nearbyservice_example/pages/nearby_menu_page.dart';
import 'package:huawei_nearbyservice_example/pages/beacon_scanning_page.dart';
import 'package:huawei_nearbyservice_example/utils/constants.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 初始化Flutter绑定
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); // 设置屏幕方向为竖屏
  await requestPermissions(); // 请求权限
  runApp(const HmsNearbyDemo()); // 运行应用
}

// TODO: 请实现自己的“权限处理程序”。
Future<void> requestPermissions() async {
  // 华为近距离服务需要一些权限才能正常工作。
  // 你需要处理这些权限才能使用华为近距离服务示例。

  // 你可以从我们的官方文档了解更多所需的权限。
  // https://developer.huawei.com/consumer/en/doc/development/HMS-Plugin-Guides/dev-process-0000001073825475
}

class HmsNearbyDemo extends StatelessWidget {
  const HmsNearbyDemo({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        appBarTheme: AppBarTheme(
          color: Colors.blue, // 设置AppBar颜色为蓝色
          elevation: 0.0, // 取消阴影
          iconTheme: IconThemeData(color: Colors.white), // 设置图标颜色为白色
          titleTextStyle: TextStyle(
            fontSize: 22.0,
            color: Colors.white,
          ), // 设置标题文字样式
        ),
        buttonTheme: ButtonThemeData(
          buttonColor: Colors.blue, // 设置按钮颜色为蓝色
          textTheme: ButtonTextTheme.primary, // 设置按钮文本主题
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20.0), // 设置圆角边框
          ),
        ),
      ),
      initialRoute: Routes.menuPage, // 初始路由
      routes: <String, WidgetBuilder>{
        '/': (BuildContext context) => const NearbyMenuPage(), // 主页面
        Routes.discoveryAndTransfer: (BuildContext context) => const DiscoveryTransferPage(), // 发现和传输页面
        Routes.message: (BuildContext context) => const MessagingPage(), // 消息页面
        Routes.beaconScan: (BuildContext context) => const BeaconScanningPage(), // 信标扫描页面
      },
    );
  }
}

更多关于Flutter华为近距离服务插件huawei_nearbyservice的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter华为近距离服务插件huawei_nearbyservice的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


huawei_nearbyservice 是华为提供的一个 Flutter 插件,用于在 Flutter 应用中集成华为的近距离服务(Nearby Service)。近距离服务允许设备在无需互联网连接的情况下,通过蓝牙、Wi-Fi 或 Wi-Fi Direct 进行数据传输和通信。

以下是如何在 Flutter 项目中使用 huawei_nearbyservice 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 huawei_nearbyservice 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  huawei_nearbyservice: ^x.x.x  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置项目

2.1 Android 配置

android/app/build.gradle 文件中,确保 minSdkVersion 至少为 21

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 30
    ...
}

2.2 iOS 配置

ios/Runner/Info.plist 文件中,添加以下权限:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>我们需要使用蓝牙来进行近场通信</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>我们需要使用蓝牙来进行近场通信</string>
<key>NSLocalNetworkUsageDescription</key>
<string>我们需要使用本地网络来进行近场通信</string>

3. 初始化 Nearby Service

在你的 Flutter 应用中,首先需要初始化 NearbyService

import 'package:huawei_nearbyservice/huawei_nearbyservice.dart';

void initNearbyService() async {
  await NearbyService.initService();
}

4. 发现设备

你可以使用 discover() 方法来发现附近的设备:

void discoverDevices() {
  NearbyService.discover(
    strategy: Strategy.P2P,
    onFound: (String endpointId, String endpointName, String serviceId) {
      print('Found device: $endpointName');
    },
    onLost: (String endpointId) {
      print('Lost device: $endpointId');
    },
  );
}

5. 广播设备

你可以使用 broadcast() 方法来广播你的设备:

void broadcastDevice() {
  NearbyService.broadcast(
    strategy: Strategy.P2P,
    serviceId: 'your_service_id',
    serviceName: 'your_service_name',
    onSuccess: () {
      print('Broadcasting started');
    },
    onFailure: (String error) {
      print('Broadcasting failed: $error');
    },
  );
}

6. 发送和接收数据

你可以使用 sendData() 方法向其他设备发送数据,并使用 onReceiveData 回调来接收数据:

void sendData(String endpointId, String data) {
  NearbyService.sendData(
    endpointId: endpointId,
    data: data,
    onSuccess: () {
      print('Data sent successfully');
    },
    onFailure: (String error) {
      print('Failed to send data: $error');
    },
  );
}

void receiveData() {
  NearbyService.onReceiveData = (String endpointId, String data) {
    print('Received data: $data from $endpointId');
  };
}

7. 停止服务

在不需要使用 Nearby Service 时,记得停止服务以释放资源:

void stopNearbyService() {
  NearbyService.stopService();
}

8. 处理权限

确保在应用中请求必要的权限,如蓝牙、Wi-Fi 等。可以使用 permission_handler 插件来处理权限请求。

import 'package:permission_handler/permission_handler.dart';

void requestPermissions() async {
  await Permission.bluetooth.request();
  await Permission.location.request();
  // 其他必要的权限
}

9. 完整示例

以下是一个简单的示例,展示了如何发现设备、广播设备、发送和接收数据:

import 'package:flutter/material.dart';
import 'package:huawei_nearbyservice/huawei_nearbyservice.dart';
import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: NearbyServiceDemo(),
    );
  }
}

class NearbyServiceDemo extends StatefulWidget {
  [@override](/user/override)
  _NearbyServiceDemoState createState() => _NearbyServiceDemoState();
}

class _NearbyServiceDemoState extends State<NearbyServiceDemo> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initNearbyService();
    requestPermissions();
  }

  void initNearbyService() async {
    await NearbyService.initService();
  }

  void requestPermissions() async {
    await Permission.bluetooth.request();
    await Permission.location.request();
  }

  void discoverDevices() {
    NearbyService.discover(
      strategy: Strategy.P2P,
      onFound: (String endpointId, String endpointName, String serviceId) {
        print('Found device: $endpointName');
      },
      onLost: (String endpointId) {
        print('Lost device: $endpointId');
      },
    );
  }

  void broadcastDevice() {
    NearbyService.broadcast(
      strategy: Strategy.P2P,
      serviceId: 'your_service_id',
      serviceName: 'your_service_name',
      onSuccess: () {
        print('Broadcasting started');
      },
      onFailure: (String error) {
        print('Broadcasting failed: $error');
      },
    );
  }

  void sendData(String endpointId, String data) {
    NearbyService.sendData(
      endpointId: endpointId,
      data: data,
      onSuccess: () {
        print('Data sent successfully');
      },
      onFailure: (String error) {
        print('Failed to send data: $error');
      },
    );
  }

  void receiveData() {
    NearbyService.onReceiveData = (String endpointId, String data) {
      print('Received data: $data from $endpointId');
    };
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Huawei Nearby Service Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: discoverDevices,
              child: Text('Discover Devices'),
            ),
            ElevatedButton(
              onPressed: broadcastDevice,
              child: Text('Broadcast Device'),
            ),
            ElevatedButton(
              onPressed: () => sendData('endpoint_id', 'Hello, Nearby!'),
              child: Text('Send Data'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部