
正文
xamarin/xamarin.forms 在锁屏电源唤醒时保持后台运行
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间**
方法(一)
[BroadcastReceiver(Enabled = true)]
public class AlarmService : BroadcastReceiver
{
//public event EventHandler WakeLockStatusChanged;
public override void OnReceive(Context context, Intent intent)
{
PowerManager pm = (PowerManager)context.GetSystemService(Context.PowerService);
PowerManager.WakeLock wl = pm.NewWakeLock(WakeLockFlags.Partial, "MyWakelockTag");
wl.Acquire();
//if (wl.IsHeld)
//{
// wl.Release();
//}
}
}
private void InitBroadcastReceiver()
{
_alarmService = new AlarmService();
Application.Context.RegisterReceiver(_alarmService, new IntentFilter(ConnectivityManager.ConnectivityAction));
} protected override void OnStart()
{
base.OnStart();
InitBroadcastReceiver();
} protected override void OnStop()
{
base.OnStop(); if (_alarmService != null)
{
Application.Context.UnregisterReceiver(_alarmService);
_alarmService = null;
} }
方法(二)
//获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行
private void AcquireWakeLock()
{
if (null == _wakeLock)
{
PowerManager pm = (PowerManager)GetSystemService(Context.PowerService);
_wakeLock = pm.NewWakeLock(WakeLockFlags.Partial | WakeLockFlags.OnAfterRelease, "MyWakelockTag");
if (_wakeLock != null)
{
_wakeLock.Acquire();
}
}
} //释放设备电源锁
private void ReleaseWakeLock()
{
if (null != _wakeLock || _wakeLock.IsHeld)
{
_wakeLock.Release();
_wakeLock = null;
}
}
参考资料:
https://docs.microsoft.com/zh-cn/dotnet/api/Android.OS.PowerManager.NewWakeLock?view=xamarin-android-sdk-9#Android_OS_PowerManager_NewWakeLock_Android_OS_WakeLockFlags_System_String_
https://stackoverflow.com/questions/54532221/prevent-app-from-going-on-onpause-when-turning-screen-off-using-partial-wakelock/54548392?r=SearchResults#54548392
http://www.itgo.me/a/x9010099145016859770/xamarin-forms-broadcast-receiver-not-working-when-app-is-closed





