我有一個Android前臺服務,帶有WiFi鎖,充當另一個本地設備的Web服務。在打盹模式之前,獲取WiFi鎖並根據需要提供服務非常有效。Android 7.0(Nougat)打盹模式停止Web服務
即使我的應用關閉了電池優化功能,當屏幕關閉幾分鐘時,手機仍然會關閉應用。
我該如何正確提醒Android,客戶請求的服務明確在前臺執行,並且他們不希望他們的電話在此時進入睡眠狀態?
編輯:這個問題仍然存在於Android的8.0(奧利奧)
我有一個Android前臺服務,帶有WiFi鎖,充當另一個本地設備的Web服務。在打盹模式之前,獲取WiFi鎖並根據需要提供服務非常有效。Android 7.0(Nougat)打盹模式停止Web服務
即使我的應用關閉了電池優化功能,當屏幕關閉幾分鐘時,手機仍然會關閉應用。
我該如何正確提醒Android,客戶請求的服務明確在前臺執行,並且他們不希望他們的電話在此時進入睡眠狀態?
編輯:這個問題仍然存在於Android的8.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
你可以做到這樣:就像你打電話給你的服務,你可以添加保持屏幕清醒的代碼。這將避免手機自動鎖定。以下是文檔中的示例代碼片段。
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:
感謝您的回答。保持屏幕可能會工作。但是,當用戶簡單地關閉屏幕時,它會消耗更多的電池,而周圍的工作也會消失。由於服務器正在運行,我不應該教育他們離開他們的屏幕。 – Justin
中所述的有效方式使用報警管理器,但是如問題的前五個單詞中所述,我使用的是前臺服務。 – Justin