2016-09-29 53 views
18

我有一個Android前臺服務,帶有WiFi鎖,充當另一個本地設備的Web服務。在打盹模式之前,獲取WiFi鎖並根據需要提供服務非常有效。Android 7.0(Nougat)打盹模式停止Web服務

即使我的應用關閉了電池優化功能,當屏幕關閉幾分鐘時,手機仍然會關閉應用。

我該如何正確提醒Android,客戶請求的服務明確在前臺執行,並且他們不希望他們的電話在此時進入睡眠狀態?

編輯:這個問題仍然存在於Android的8.0(奧利奧)

回答

0

使用前景服務 - https://developer.android.com/guide/components/services.html#Foreground

前臺服務是用戶主動意識到 ,不是一個服務嘗試系統在內存不足時候殺死的候選人。 A 前臺服務必須提供狀態欄 的通知,該通知置於「正在進行」標題下。這意味着,除非該服務停止 或從前臺移除,否則不能解除通知 。

您也可以嘗試FULL_WAKE_LOCK或SCREEN_DIM_WAKE_LOCK,看看它是否可以防止您的設備進入瞌睡mode.refer - https://developer.android.com/reference/android/os/PowerManager.html#FULL_WAKE_LOCK

+0

中所述的有效方式使用報警管理器,但是如問題的前五個單詞中所述,我使用的是前臺服務。 – Justin

1

你可以做到這樣:就像你打電話給你的服務,你可以添加保持屏幕清醒的代碼。這將避免手機自動鎖定。以下是文檔中的示例代碼片段。

public class MainActivity extends Activity { 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //keep screen awake 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     } 

這種方法的優點是,不像喚醒鎖定,它不需要特殊的權限,平臺正確管理用戶應用程序之間移動,而無需您的應用程序不必擔心釋放未使用的資源。 此外,您可以按照以下SO answer

+0

感謝您的回答。保持屏幕可能會工作。但是,當用戶簡單地關閉屏幕時,它會消耗更多的電池,而周圍的工作也會消失。由於服務器正在運行,我不應該教育他們離開他們的屏幕。 – Justin