Flutter自动启动管理插件autostart_settings的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter自动启动管理插件autostart_settings的使用

概述

许多手机制造商默认禁用了应用程序的自启动功能,这会影响设备重启后的本地通知或后台任务。autostart_settings插件可以帮助用户导航到特定设备的设置页面,启用所选应用的自启动权限,并防止这些应用在后台被系统杀死。

支持的厂商

  • Asus
  • HTC
  • Huawei
  • IQOO
  • LeEco
  • Mediatek
  • Meizu
  • Nokia
  • OnePlus
  • Oppo
  • Samsung
  • Tecno
  • Vivo
  • Xiaomi / Redmi

Android支持版本

  • Android 14+

示例运行图

安装

首先,在 pubspec.yaml 文件中添加 autostart_settings 作为依赖:

dependencies:
  flutter:
    sdk: flutter
  autostart_settings: ^最新版本号

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

使用方法

import 'package:autostart_settings/autostart_settings.dart';

final canOpen = await AutostartSettings.canOpen(autoStart: true, batterySafer: true);
if (canOpen) {
    final opened = await AutostartSettings.open(autoStart: true, batterySafer: true);
}

示例代码

以下是一个完整的示例,展示如何在Flutter应用中使用 autostart_settings 插件:

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _text = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Autostart example app'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: ElevatedButton(
                    onPressed: () async {
                      final canOpen = await AutostartSettings.canOpen(
                          autoStart: true, batterySafer: true);
                      setState(() {
                        if (canOpen) {
                          _text = 'Device can open autostart settings';
                        } else {
                          _text = 'Device doesn\'t have autostart settings activity';
                        }
                      });
                    },
                    child: const Text('Can open autostart settings')),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: ElevatedButton(
                    onPressed: () async {
                      final opened = await AutostartSettings.open(
                          autoStart: true, batterySafer: true);
                      setState(() {
                        _text = 'Settings opened: $opened';
                      });
                    },
                    child: const Text('Open autostart settings')),
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: Text(_text),
              )
            ],
          ),
        ),
      ),
    );
  }
}

推荐

为了更好的可靠性,建议同时请求忽略电池优化权限:

import 'package:permission_handler/permission_handler.dart';

await Permission.ignoreBatteryOptimizations.request();

贡献

如果你拥有一个未添加自启动设置页面的设备,可以贡献相关活动信息。以下 ADB 命令可能有助于识别正确的活动:

  • 列出所有活动名称:adb shell dumpsys package | grep Activity
  • 查找当前活动/恢复的活动:adb shell dumpsys activity activities | grep mResumedActivity

更多关于Flutter自动启动管理插件autostart_settings的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动启动管理插件autostart_settings的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用autostart_settings插件来管理自动启动设置的示例代码。这个插件允许你在Android设备上请求用户授予应用的自动启动权限。

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

dependencies:
  flutter:
    sdk: flutter
  autostart_settings: ^x.y.z  # 请替换为最新版本号

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

接下来,在你的Flutter项目中,你可以使用以下代码来请求和检查自动启动权限:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AutoStart Settings Example'),
        ),
        body: Center(
          child: AutoStartExample(),
        ),
      ),
    );
  }
}

class AutoStartExample extends StatefulWidget {
  @override
  _AutoStartExampleState createState() => _AutoStartExampleState();
}

class _AutoStartExampleState extends State<AutoStartExample> {
  String _status = 'Checking...';

  @override
  void initState() {
    super.initState();
    _checkAutoStartPermission();
  }

  Future<void> _checkAutoStartPermission() async {
    bool isAutoStartEnabled = await AutostartSettings.isAutoStartEnabled();
    setState(() {
      _status = isAutoStartEnabled ? 'Auto Start Enabled' : 'Auto Start Disabled';
    });
  }

  Future<void> _requestAutoStartPermission() async {
    bool isGranted = await AutostartSettings.requestAutoStart();
    setState(() {
      _status = isGranted ? 'Auto Start Permission Granted' : 'Auto Start Permission Denied';
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(_status),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: () => _requestAutoStartPermission(),
          child: Text('Request Auto Start Permission'),
        ),
      ],
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含了一个按钮和一个文本显示区域。当应用启动时,它会首先检查应用的自动启动权限状态,并显示在文本区域中。用户可以点击按钮来请求自动启动权限,请求结果也会更新在文本区域中。

请注意,AutostartSettings.requestAutoStart()方法在某些设备上可能不会有返回值(即返回一个Future<void>),因为不同的设备制造商可能实现了不同的权限管理界面。此外,自动启动权限通常只在Android设备上有效,并且在不同的Android版本和设备上行为可能有所不同。

另外,由于权限管理涉及用户隐私和设备安全,因此请确保你的应用有合理的理由请求这些权限,并在用户界面中清楚地解释为什么需要这些权限。

回到顶部