Xamarin Forms - 应用程序打开时禁用自动锁定

问题描述 投票:0回答:6

我想在我的应用程序打开时禁用自动锁定。我怎样才能做到这一点?

xamarin xamarin.forms xamarin.ios xamarin.android
6个回答
12
投票

https://learn.microsoft.com/en-my/xamarin/essentials/device-display?tabs=android

只需在任何页面中将

DeviceDisplay.KeepScreenOn
设置为true/false即可。无需进入个人平台。

不过,您必须在 Android 中设置 WAKE_LOCK 权限。


4
投票

更新

下面的答案有点旧了,现在更好、更简单的方法是使用必需品并设置以下属性:

DeviceDisplay.KeepScreenOn= true; 

OG 答案

对于 iOS,您需要重写 Appdelegate 类中的

DidFinishLaunchingWithOptions
方法:

 public override bool FinishedLaunching(UIApplication uiApplication, NSDictionary launchOptions)
    {
       UIApplication.SharedApplication.IdleTimerDisabled = true;
       ....
    } 

对于 Android,您需要在 MainActivity 中执行以下操作:

您必须在 AndroidManifest 上声明此使用权限:

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

为WakeLock创建全局字段

using static Android.OS.PowerManager;
;

private WakeLock wakeLock;

在您的 OnResume 中:

PowerManager powerManager = (PowerManager)this.GetSystemService(Context.PowerService);
WakeLock wakeLock = powerManager.NewWakeLock(WakeLockFlags.Full, "My Lock");
wakeLock.Acquire();

只要记住在您的应用程序暂停或销毁时释放此锁即可:

wakeLock.Release();

通常,建议在 Activity 的 onResume() 中调用 acquire 方法,并在 onPause() 中调用 release 方法。这样我们就可以保证我们的应用程序在暂停或恢复的情况下仍然表现良好。


4
投票

Xamarin.Forms:

//show something important, do not sleep
DependencyService.Get<INativeTasks>().ExecuteTask("cannotSleep");

//can put in OnDisappearing event
DependencyService.Get<INativeTasks>().ExecuteTask("canSleep");

本机任务助手:

 public interface INativeTasks
    {
        ...
        void ExecuteTask(string task, object param=null);
        ...
    }

安卓:

全局变量和其他..

public class DroidCore
{
    private static DroidCore instance;
    public static DroidCore Current
    {
        get { return instance ?? (instance = new DroidCore()); }
    }

    public static Window MainWindow { get; set; }
    ...
}

MainActivity.cs

protected override void OnCreate(Bundle bundle)
{
...        
DroidCore.Current.MainView = this.Window.DecorView;
...
}

本地助手:

public class NativeTasks : INativeTasks
    {
    public void ExecuteTask(string task, object param = null)
    {
            switch (task)
            {

                ... //any native stuff you can imagine

            case "cannotSleep":
                DroidCore.MainWindow.AddFlags(WindowManagerFlags.KeepScreenOn);
                break;

            case "canSleep":
                DroidCore.MainWindow.ClearFlags(WindowManagerFlags.KeepScreenOn);
                break;
            }
        }
}

iOS:

本地助手:

public class NativeTasks : INativeTasks
    {
    public void ExecuteTask(string task, object param = null)
    {
            switch (task)
            {

                ... //any native stuff you can imagine

            case "cannotSleep":
                UIApplication.SharedApplication.IdleTimerDisabled = true;
                break;

            case "canSleep":
                UIApplication.SharedApplication.IdleTimerDisabled = false;
                break;
            }
        }
}

2
投票

我们可以通过使用

Xamarin.Essentials
插件来实现。在解决方案级别安装它(安装时选择 include prerelease 复选框)。

在你的

MainPage
中写下这段代码

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        ToggleScreenLock();
    }
    public void ToggleScreenLock()
    {
        if (!ScreenLock.IsActive)
            ScreenLock.RequestActive();
        else
            ScreenLock.RequestRelease();
    }
}

在Android项目中

MainActivity
添加这一行

Xamarin.Essentials.Platform.Init(this, savedInstanceState);

在致电

LoadApplication(new App());
之前。有关更多信息,请访问 Microsoft 文档

这在整个应用程序中都有效。要安装插件,请参阅下面的屏幕截图 -


1
投票

因为接受的答案在android中已被弃用

下面的代码适用于我在 Xamarin.Android

Window window = ((MainActivity)Forms.Context).Window;
window.AddFlags(WindowManagerFlags.KeepScreenOn);

0
投票

对于较新的 Android 版本,您可以使用此:

Window.AddFlags(WindowManagerFlags.KeepScreenOn);
© www.soinside.com 2019 - 2024. All rights reserved.