Flutter华为环境感知插件huawei_awareness的使用

Flutter华为环境感知插件huawei_awareness的使用

华为环境感知Flutter插件

pub.dev版本

华为环境感知Flutter插件为HUAWEI Awareness Kit在Flutter平台上的使用提供了适配代码。通过HUAWEI Awareness Kit,您的应用可以为用户提供便捷且安全的访问多样化的地方服务。

了解更多:华为开发者文档

安装

请参阅 pub.devAppGallery Connect配置

文档

问题或建议

如果您在使用HMS示例时遇到任何问题,请尝试以下选项:

  • Stack Overflow 是编程问题的最佳去处。请确保使用标签 huawei-mobile-services
  • GitHub 是这些插件的官方仓库,您可以在此提交问题或提出您的想法。
  • 华为开发者论坛 HMS Core模块是针对一般问题、寻求推荐和意见的好地方。
  • 华为开发者文档 是所有HMS Core Kit的官方文档,您可以在这里找到详细的文档。

如果您在我们的示例中遇到错误,请提交到 GitHub仓库

许可证

华为环境感知Flutter插件基于 Apache 2.0许可证 进行授权。


示例代码

/*
    Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.

    Licensed under the Apache License, Version 2.0 (the "License")
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

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

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

import 'package:flutter/material.dart';
import 'package:huawei_awareness/huawei_awareness.dart';

import 'custom_widgets/custom_app_bar.dart';
import 'custom_widgets/custom_button.dart';
import 'barrier_client_demo.dart';
import 'capture_client_demo.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  [@override](/user/override)
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  bool hmsLoggerStatus = true;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: const CustomAppBar(
        icon: true,
        size: 210,
        title: '华为环境感知',
        title2: 'Flutter插件示例',
      ),
      body: Padding(
        padding: const EdgeInsets.all(12.0),
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            const Padding(
              padding: EdgeInsets.all(8.0),
              child: Text(
                '利用用户洞察让您的应用工作得更聪明更好。',
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontWeight: FontWeight.bold,
                  fontSize: 20,
                  color: Color.fromRGBO(30, 61, 89, 1),
                ),
              ),
            ),
            const Padding(
              padding: EdgeInsets.all(8.0),
              child: Text(
                '时间、位置、天气、行为、耳机状态、信标、环境光强度和汽车蓝牙状态都是适应用户环境的重要信息。',
                textAlign: TextAlign.center,
                style: TextStyle(
                  color: Color.fromRGBO(30, 61, 89, 1),
                ),
              ),
            ),
            CustomButton(
                text: '捕获客户端示例',
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute<dynamic>(
                      builder: (BuildContext context) {
                        return const CaptureClientDemo();
                      },
                    ),
                  );
                }),
            CustomButton(
                text: '屏障客户端示例',
                onPressed: () {
                  Navigator.push(
                    context,
                    MaterialPageRoute<dynamic>(
                      builder: (BuildContext context) {
                        return const BarrierClientDemo();
                      },
                    ),
                  );
                }),
            const Padding(
              padding: EdgeInsets.symmetric(horizontal: 38.0),
              child: Divider(
                color: Color.fromRGBO(30, 61, 89, 0.5),
              ),
            ),
            const Padding(
              padding: EdgeInsets.all(8.0),
              child: Text(
                "此方法启用/禁用用于发送Awareness SDK方法的使用分析以提高服务质量的HMSLogger功能。",
                textAlign: TextAlign.center,
                style: TextStyle(
                  color: Color.fromRGBO(30, 61, 89, 1),
                ),
              ),
            ),
            CustomButton(
              text: '启用/禁用Hms Logger',
              onPressed: () {
                if (hmsLoggerStatus) {
                  AwarenessUtilsClient.disableLogger();
                  setState(() {
                    hmsLoggerStatus = false;
                  });
                } else {
                  AwarenessUtilsClient.enableLogger();
                  setState(() {
                    hmsLoggerStatus = true;
                  });
                }
              },
            ),
          ],
        ),
      ),
    );
  }
}

捕获客户端示例 (CaptureClientDemo)

import 'package:flutter/material.dart';
import 'package:huawei_awareness/huawei_awareness.dart';

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

class _CaptureClientDemoState extends State<CaptureClientDemo> {
  String _message = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    _startCapture();
  }

  Future<void> _startCapture() async {
    try {
      final response = await AwarenessClient.capture(
        AwarenessConstants.BAROMETER,
        AwarenessConstants.LOCATION,
        AwarenessConstants.BEACON,
      );

      setState(() {
        _message =
            'Barometer: ${response.barometer}, Location: ${response.location?.latitude},${response.location?.longitude}, Beacon: ${response.beacon}';
      });
    } catch (e) {
      setState(() {
        _message = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('捕获客户端示例')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_message),
          ],
        ),
      ),
    );
  }
}

屏障客户端示例 (BarrierClientDemo)

import 'package:flutter/material.dart';
import 'package:huawei_awareness/huawei_awareness.dart';

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

class _BarrierClientDemoState extends State<BarrierClientDemo> {
  String _message = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    _startBarrierCheck();
  }

  Future<void> _startBarrierCheck() async {
    try {
      final response = await AwarenessClient.check(
        AwarenessConstants.BAROMETER_BARRIER,
        AwarenessConstants.LOCATION_BARRIER,
      );

      setState(() {
        _message =
            'Barometer Barrier: ${response.barometerBarrier}, Location Barrier: ${response.locationBarrier}';
      });
    } catch (e) {
      setState(() {
        _message = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('屏障客户端示例')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_message),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter华为环境感知插件huawei_awareness的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter华为环境感知插件huawei_awareness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


huawei_awareness 是华为提供的一个 Flutter 插件,用于访问华为设备的环境感知能力。该插件可以帮助开发者获取设备周围的物理环境信息,如天气、地理位置、时间、光照强度、用户活动等。以下是使用 huawei_awareness 插件的基本步骤和示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  huawei_awareness: ^1.0.0+300

然后运行 flutter pub get 以安装依赖。

2. 配置华为开发者账号

在使用 huawei_awareness 插件之前,你需要在 华为开发者联盟 上注册一个开发者账号,并创建一个应用以获取 agconnect-services.json 文件。将该文件放置在 android/app 目录下。

3. 初始化插件

main.dart 文件中初始化 HuaweiAwareness 插件:

import 'package:flutter/material.dart';
import 'package:huawei_awareness/huawei_awareness.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await HuaweiAwareness.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Huawei Awareness Demo',
      home: AwarenessDemo(),
    );
  }
}

4. 使用环境感知功能

以下是一些常见的环境感知功能的示例代码:

获取当前天气信息

import 'package:huawei_awareness/huawei_awareness.dart';

Future<void> getWeather() async {
  try {
    WeatherResponse weatherResponse = await HuaweiAwareness.getWeather();
    print('Weather: ${weatherResponse.weatherSituation}');
    print('Temperature: ${weatherResponse.temperatureC}°C');
  } catch (e) {
    print('Error: $e');
  }
}

获取用户活动状态

import 'package:huawei_awareness/huawei_awareness.dart';

Future<void> getActivityStatus() async {
  try {
    ActivityStatusResponse activityStatusResponse = await HuaweiAwareness.getActivityStatus();
    print('Activity Type: ${activityStatusResponse.mostLikelyActivity}');
    print('Confidence: ${activityStatusResponse.confidence}');
  } catch (e) {
    print('Error: $e');
  }
}

获取光照强度

import 'package:huawei_awareness/huawei_awareness.dart';

Future<void> getLightIntensity() async {
  try {
    AmbientLightResponse lightResponse = await HuaweiAwareness.getLightIntensity();
    print('Light Intensity: ${lightResponse.lightIntensity} lux');
  } catch (e) {
    print('Error: $e');
  }
}

获取地理位置信息

import 'package:huawei_awareness/huawei_awareness.dart';

Future<void> getLocation() async {
  try {
    LocationResponse locationResponse = await HuaweiAwareness.getLocation();
    print('Latitude: ${locationResponse.latitude}');
    print('Longitude: ${locationResponse.longitude}');
  } catch (e) {
    print('Error: $e');
  }
}

5. 处理权限

在访问某些环境感知功能时,可能需要用户授予相关权限。例如,获取地理位置信息需要 ACCESS_FINE_LOCATION 权限。你可以在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

并在运行时请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.location.request();
  if (status.isGranted) {
    print('Location permission granted');
  } else {
    print('Location permission denied');
  }
}
回到顶部