如何在Flutter中让应用保持唤醒状态?

75
如何在Flutter中防止应用锁屏? 是否有一个标志可以开启或关闭?Flutter SDK 是否公开了这个功能? 类似于 keepAwake(true); 这样的东西。
4个回答

128

注意:此套件 wakelock 与其他套件存在一些依赖冲突。请使用 wakelock_plus 替代。点击 参考

由于 screen 插件 的支持已经停止,并且现在有一些问题,您可以使用 wakelock

全面披露:我是此插件的作者,然而,它基本上是从 screen 插件中移植了 wakelock 功能并修复了问题:

import 'package:wakelock/wakelock.dart';

// To keep the screen on:
Wakelock.enable(); // or Wakelock.toggle(on: true);

// To let the screen turn off again:
Wakelock.disable(); // or Wakelock.toggle(on: false);

了解更多。


1
我应该在哪里添加Wakelock.enable()?我想要它在我的应用程序的每个页面上。 - Andreea Purta
3
2021年还推荐这个吗?也就是说,我们真的需要一个第三方插件来处理这么常见的事情吗?Flutter本身提供了类似的功能吗? - SePröbläm
9
@SePröbläm 你好,我仍在维护它 :) 我们最近也添加了 macOS 支持。Flutter是开源的-他们有第一方插件,然而,他们自己说如果有更好的第三方项目存在,他们将放弃他们的第一方解决方案。所以,为什么他们想要为已经完全正常工作的东西创建一个呢? - creativecreatorormaybenot
1
@creativecreatorormaybenot 很好知道。非常感谢您提供它! - SePröbläm
我认为这可以让应用程序在后台运行,您可以播放例如“RINGRINGRING”之类的声音 - 是否有可能以某种方式打开屏幕? - Toskan
@AlexSemeniuk 这与显示无关。 - creativecreatorormaybenot

62

我找到了一个能完成任务的插件。 https://pub.dartlang.org/packages/screen

import 'package:screen/screen.dart';

// Prevent screen from going into sleep mode:
Screen.keepOn(true);

您还需要为Android设置权限。

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

22
现在这就是 Stackoverflow 精神,你没有更新自己的答案,而是接受了别人的回答 :D - user6274128
3
@user6274128 因为你这么做,我给他们俩都点了赞! - Robert Williams
1
Wakelock可以在没有任何权限的情况下使用。更多信息请访问https://pub.dev/packages/wakelock - Vinod

6

这个包可以完成以下工作: https://pub.dev/packages/wakelock

它依赖于Flutter的Wakelock类

权限 在任何平台上,wakelock插件都不需要任何权限。 这是因为它只启用屏幕唤醒锁定,而不启用任何部分(CPU)唤醒锁定,这将使应用程序在后台保持活动状态。

如何使用?

// to enable the Android and iOS wakelock
Wakelock.enable();

// to disables the wakelock again.
Wakelock.disable();



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


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


class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    Wakelock.enable(); // Here :)
    return MaterialApp(
      home:  MyHomePage(),
    );
  }
}

注意:您需要停止并重新运行。

5

正如@creativecreatorormaybenot已经回答的那样,您可以使用wakeLock来保持屏幕常亮。但我想补充一下在哪里放置。 这是一个代码片段,说明我如何使用它并且对我很好用:

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

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    Wakelock.enable();
    return MaterialApp(
      debugShowCheckedModeBanner: false,
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MainScreen()
    );
  }
}

希望这能解决你的问题。以下是该软件包的链接:https://pub.dev/packages/wakelock


[wakelock: ^0.5.6,](https://pub.dev/packages/wakelock)可以很好地完成工作。 - Trophy Developers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接