Flutter穿戴设备持续活动管理插件wear_ongoing_activity的使用
Flutter穿戴设备持续活动管理插件wear_ongoing_activity的使用
wear_ongoing_activity
是一个 Flutter 插件,用于在 Wear OS 设备上创建和维护持续活动通知。本文将详细介绍如何使用该插件,并提供一个完整的示例代码。
Getting Started
AndroidManifest.xml
首先,在 AndroidManifest.xml
文件中添加必要的权限和服务配置:
<!-- Add permissions for the types specified in `foregroundServiceType` below -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_REMOTE_MESSAGING" />
<application>
...
<service
android:name="dev.rexios.wear_ongoing_activity.OngoingActivityService"
android:exported="false"
android:foregroundServiceType="health|remoteMessaging|..."
android:stopWithTask="true" />
...
</application>
确保在启动活动之前请求通知权限和其他所需的权限:
import 'package:permission_handler/permission_handler.dart';
void main() {
[Permission.notification, Permission.sensors].request();
}
Usage
Start an Activity
启动一个持续活动通知:
import 'package:wear_ongoing_activity/wear_ongoing_activity.dart';
void main() {
WearOngoingActivity.start(
channelId: 'ongoing_activity',
channelName: 'Ongoing Activity',
notificationId: 12345,
category: NotificationCategory.workout,
// This must be a file in `android/app/src/main/res/drawable`
smallIcon: 'ic_launcher',
// This must be a file in `android/app/src/main/res/drawable`
staticIcon: 'ic_launcher',
status: OngoingActivityStatus(
templates: [
'#type#: #time#',
],
parts: [
TextPart(name: 'type', text: 'countup'),
StopwatchPart(name: 'time', timeZero: DateTime.now()),
],
),
);
}
Update an Activity
更新一个正在进行的活动:
import 'package:wear_ongoing_activity/wear_ongoing_activity.dart';
void main() async {
if (!await WearOngoingActivity.isOngoing()) {
// Attempting to update an activity that is not ongoing will throw an error
return;
}
await WearOngoingActivity.update(
OngoingActivityStatus(
templates: [
'#type#: #time#',
],
parts: [
TextPart(name: 'type', text: 'countdown'),
TimerPart(
name: 'time',
timeZero: DateTime.now().add(const Duration(minutes: 5)),
),
],
),
);
}
Stop an Activity
停止一个正在进行的活动:
import 'package:wear_ongoing_activity/wear_ongoing_activity.dart';
void main() {
WearOngoingActivity.stop();
}
完整示例
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 wear_ongoing_activity
插件:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:wear_ongoing_activity/wear_ongoing_activity.dart';
void main() {
runApp(const MaterialApp(home: MyHomePage()));
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var _counter = 0;
var _ongoing = false;
Timer? _updateTimer;
OngoingActivityStatus get _status => OngoingActivityStatus(
templates: [
'#label#: #count#',
],
parts: [
TextPart(name: 'label', text: 'Count'),
TextPart(name: 'count', text: '$_counter'),
],
);
void _start() async {
setState(() => _ongoing = true);
await WearOngoingActivity.start(
channelId: 'ongoing_activity',
channelName: 'Ongoing Activity',
notificationId: 12345,
category: NotificationCategory.workout,
smallIcon: 'ic_launcher',
staticIcon: 'ic_launcher',
status: _status,
);
_updateTimer = Timer.periodic(
const Duration(seconds: 1),
(timer) async {
setState(() => _counter++);
// If the activity is not started yet, return and try again later
if (!await WearOngoingActivity.isOngoing()) return;
unawaited(WearOngoingActivity.update(_status));
},
);
}
void _stop() async {
setState(() => _ongoing = false);
await WearOngoingActivity.stop();
_updateTimer?.cancel();
}
@override
void initState() {
super.initState();
[Permission.notification, Permission.sensors].request();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
if (_ongoing)
IconButton(icon: const Icon(Icons.stop), onPressed: _stop)
else
IconButton(
icon: const Icon(Icons.play_arrow),
onPressed: _start,
),
],
),
),
);
}
}
说明
- 权限请求:在
initState
方法中请求通知和传感器权限。 - 启动活动:点击播放按钮时启动活动,并设置定时器每秒更新计数。
- 更新活动:定时器每秒调用
WearOngoingActivity.update
方法更新活动状态。 - 停止活动:点击停止按钮时停止活动并取消定时器。
通过以上步骤,你可以在 Wear OS 设备上创建和管理持续活动通知。希望这个示例对你有所帮助!
更多关于Flutter穿戴设备持续活动管理插件wear_ongoing_activity的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter穿戴设备持续活动管理插件wear_ongoing_activity的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter穿戴设备应用中使用wear_ongoing_activity
插件的示例代码。这个插件主要用于管理穿戴设备上的持续活动通知,以告知用户某个活动正在进行中。
首先,确保你已经在pubspec.yaml
文件中添加了wear_ongoing_activity
依赖:
dependencies:
flutter:
sdk: flutter
wear_ongoing_activity: ^最新版本号 # 请替换为当前最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,是一个简单的示例代码,展示了如何使用wear_ongoing_activity
插件来启动和停止一个持续活动通知。
import 'package:flutter/material.dart';
import 'package:wear_ongoing_activity/wear_ongoing_activity.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Wear Ongoing Activity Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
// 启动持续活动通知
await WearOngoingActivity.start(
title: 'Activity in Progress',
description: 'This is an ongoing activity notification.',
icon: 'drawable/ic_notification', // 确保你有这个资源文件
);
},
child: Text('Start Ongoing Activity'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// 停止持续活动通知
await WearOngoingActivity.stop();
},
child: Text('Stop Ongoing Activity'),
),
],
),
),
),
);
}
}
注意事项:
-
图标资源:在
icon
参数中指定的图标资源(例如'drawable/ic_notification'
)需要你在Android项目中提供。确保在android/app/src/main/res/drawable
目录下有一个名为ic_notification
的图标文件。 -
权限和配置:某些情况下,你可能需要在
AndroidManifest.xml
中添加特定的权限或配置来支持持续活动通知。不过,wear_ongoing_activity
插件通常已经处理了大部分配置工作。 -
错误处理:在实际应用中,你应该添加适当的错误处理逻辑,比如处理
WearOngoingActivity.start
和WearOngoingActivity.stop
方法可能抛出的异常。 -
测试:确保在真实的穿戴设备或模拟器上测试你的应用,因为持续活动通知在普通手机模拟器上可能无法正确显示。
这个示例代码展示了基本的启动和停止持续活动通知的功能。根据你的具体需求,你可以进一步自定义通知的内容和行为。