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:當鎖被釋放時,保持屏幕亮起一段時間**

 

方法(一)

 1 [BroadcastReceiver(Enabled = true)]
 2     public class AlarmService : BroadcastReceiver
 3     {
 4         //public event EventHandler WakeLockStatusChanged;
 5         public override void OnReceive(Context context, Intent intent)
 6         {
 7             PowerManager pm = (PowerManager)context.GetSystemService(Context.PowerService);
 8             PowerManager.WakeLock wl = pm.NewWakeLock(WakeLockFlags.Partial, "MyWakelockTag");
 9             wl.Acquire();
10             //if (wl.IsHeld)
11             //{
12             //    wl.Release();
13             //}
14         }
15     }
 1  private void InitBroadcastReceiver()
 2         {
 3             _alarmService = new AlarmService();
 4             Application.Context.RegisterReceiver(_alarmService, new IntentFilter(ConnectivityManager.ConnectivityAction));
 5         }
 6 
 7  protected override void OnStart()
 8         {
 9             base.OnStart();
10             InitBroadcastReceiver();
11         }
12 
13         protected override void OnStop()
14         {
15             base.OnStop();
16 
17             if (_alarmService != null)
18             {
19                 Application.Context.UnregisterReceiver(_alarmService);
20                 _alarmService = null;
21             }
22 
23         }

 

方法(二)

 1    //獲取電源鎖,保持該服務在屏幕熄滅時仍然獲取CPU時,保持運行  
 2         private void AcquireWakeLock()
 3         {
 4             if (null == _wakeLock)
 5             {
 6                 PowerManager pm = (PowerManager)GetSystemService(Context.PowerService);
 7                 _wakeLock = pm.NewWakeLock(WakeLockFlags.Partial | WakeLockFlags.OnAfterRelease, "MyWakelockTag");
 8                 if (_wakeLock != null)
 9                 {
10                     _wakeLock.Acquire();
11                 }
12             }
13         }
14 
15         //釋放設備電源鎖  
16         private void ReleaseWakeLock()
17         {
18             if (null != _wakeLock || _wakeLock.IsHeld)
19             {
20                 _wakeLock.Release();
21                 _wakeLock = null;
22             }
23         }  

 

參考資料:
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM