Flutter活动识别插件activity_recognition_flutter2的使用

Flutter活动识别插件activity_recognition_flutter2的使用

本项目是一个新的 Flutter 插件项目。该插件包包含针对 Android 和/或 iOS 的平台特定实现代码。

获取开始

对于 Flutter 开发的帮助信息,可以查看官方文档,其中包含教程、示例、移动开发指南以及完整的 API 参考。


示例代码

以下是一个简单的示例,展示如何使用 activity_recognition_flutter2 插件。

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

import 'package:flutter/services.dart';
import 'package:activity_recognition_flutter2/activity_recognition_flutter2.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _activityRecognitionFlutter2Plugin = ActivityRecognitionFlutter2();

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

  // 异步方法初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能失败,因此我们使用 try/catch 来处理 PlatformException
    // 我们还处理消息可能返回 null 的情况
    try {
      platformVersion = await _activityRecognitionFlutter2Plugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果小部件在异步平台消息还在飞行时被从树中移除,则我们希望丢弃回复而不是调用
    // setState 来更新我们的非存在外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行于: $_platformVersion\n'),
        ),
      ),
    );
  }
}

更多关于Flutter活动识别插件activity_recognition_flutter2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter活动识别插件activity_recognition_flutter2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


activity_recognition_flutter2 是一个用于 Flutter 的插件,用于识别设备的物理活动,如步行、跑步、骑车、静止等。它是 activity_recognition 插件的继任者,提供了更好的 API 和功能支持。

安装插件

首先,你需要在 pubspec.yaml 文件中添加依赖项:

dependencies:
  activity_recognition_flutter2: ^最新版本

然后运行 flutter pub get 来安装插件。

配置插件

Android 配置

AndroidManifest.xml 文件中添加以下权限:

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

确保你的 compileSdkVersiontargetSdkVersion 至少为 29。

iOS 配置

Info.plist 文件中添加以下权限:

<key>NSMotionUsageDescription</key>
<string>We need access to your motion data to recognize your activity.</string>

使用插件

初始化插件

在使用插件之前,你需要初始化它:

import 'package:activity_recognition_flutter2/activity_recognition_flutter2.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await ActivityRecognitionFlutter2.initialize();
  
  runApp(MyApp());
}

请求权限

在开始识别活动之前,你需要请求必要的权限:

bool hasPermission = await ActivityRecognitionFlutter2.hasPermission();
if (!hasPermission) {
  await ActivityRecognitionFlutter2.requestPermission();
}

开始和停止活动识别

你可以使用 startActivityRecognition 方法来开始活动识别,并使用 stopActivityRecognition 方法来停止它:

// 开始活动识别
ActivityRecognitionFlutter2.startActivityRecognition();

// 停止活动识别
ActivityRecognitionFlutter2.stopActivityRecognition();

监听活动变化

你可以使用 ActivityRecognitionFlutter2.activityStream 来监听活动变化:

StreamSubscription<ActivityEvent>? _activitySubscription;

void startListening() {
  _activitySubscription = ActivityRecognitionFlutter2.activityStream.listen((ActivityEvent event) {
    print('Detected activity: ${event.type}');
    print('Confidence: ${event.confidence}');
  });
}

void stopListening() {
  _activitySubscription?.cancel();
}

处理活动类型

ActivityEvent 包含了检测到的活动类型和置信度。活动类型可以是以下几种:

  • ActivityType.IN_VEHICLE
  • ActivityType.ON_BICYCLE
  • ActivityType.RUNNING
  • ActivityType.STILL
  • ActivityType.WALKING
  • ActivityType.UNKNOWN

示例代码

以下是一个完整的示例,展示了如何使用 activity_recognition_flutter2 插件:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await ActivityRecognitionFlutter2.initialize();
  runApp(MyApp());
}

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

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

class _ActivityRecognitionScreenState extends State<ActivityRecognitionScreen> {
  String _activity = 'Unknown';
  int _confidence = 0;

  StreamSubscription<ActivityEvent>? _activitySubscription;

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

  Future<void> _checkPermissions() async {
    bool hasPermission = await ActivityRecognitionFlutter2.hasPermission();
    if (!hasPermission) {
      await ActivityRecognitionFlutter2.requestPermission();
    }
    _startListening();
  }

  void _startListening() {
    ActivityRecognitionFlutter2.startActivityRecognition();
    _activitySubscription = ActivityRecognitionFlutter2.activityStream.listen((ActivityEvent event) {
      setState(() {
        _activity = event.type.toString().split('.').last;
        _confidence = event.confidence;
      });
    });
  }

  [@override](/user/override)
  void dispose() {
    _activitySubscription?.cancel();
    ActivityRecognitionFlutter2.stopActivityRecognition();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Activity Recognition'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('Detected Activity: $_activity'),
            Text('Confidence: $_confidence'),
          ],
        ),
      ),
    );
  }
}
回到顶部