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

nzkunb0c  于 2023-11-15  发布在  其他
关注(0)|答案(6)|浏览(179)

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

llew8vvj

llew8vvj1#

https://learn.microsoft.com/en-my/xamarin/essentials/device-display?tabs=android
只需要在任何页面中将DeviceDisplay.KeepScreenOn设置为true/false就可以了。不需要进入单独的平台。
在Android中,你需要设置权限WAKE_BACK。

hgqdbh6s

hgqdbh6s2#

更新

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

DeviceDisplay.KeepScreenOn= true;

字符串

OG ANSWER

对于iOS,您需要覆盖Appdelegate类中的DidFinishLaunchingWithOptions方法:

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


对于Android,您需要在MainActivity中为其执行以下操作:
你必须在AndroidManifest上声明这个uses-permission:

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


为WakeLock using static Android.OS.PowerManager;创建一个全局字段;

private WakeLock wakeLock;


在你的简历中:

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


只需记住在应用程序暂停或销毁时通过执行以下操作释放此锁:

wakeLock.Release();


通常情况下,我们建议您在Activity的onResume()中调用acquire方法,在onResume()中调用release方法,这样可以保证我们的应用在暂停或恢复的情况下仍然能够正常运行。

ilmyapht

ilmyapht3#

Xamarin.表单:

//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;
            }
        }
}

jtoj6r0c

jtoj6r0c4#

我们可以通过使用**Xamarin.Essentials**插件来实现它。在解决方案级别安装它(在安装时选择 * 包括预发布 * 复选框)。
在你的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 docs
这是整个应用程序的工作。要安装插件,请参阅下面的截图-
x1c 0d1x的数据

t5fffqht

t5fffqht5#

由于已接受的答案在Android中已被弃用
下面的代码适用于我在Xamarin.Android

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

字符串

acruukt9

acruukt96#

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

Window.AddFlags(WindowManagerFlags.KeepScreenOn);

字符串

相关问题