2017-08-17 54 views
9

我目前正在實現一個功能,要求用戶忽略應用程序的電池優化。這樣做的原因是,應用程序的主要功能不幸受到省電模式的嚴重影響。isPowerSaveMode()對於華爲設備總是返回false

爲了達到我的目標,我通過創建Intent並將Action設置爲ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS來提示用戶。

雖然在發射Intent之前,我同時檢查了isPowerSaveMode()isIgnoringBatteryOptimizations(),以確保當省電模式未啓用時我不提示用戶;這是該功能的要求。我這樣做的方法是:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
boolean isPowerSaveMode = pm.isPowerSaveMode(); // always returns false for Huawei devices 

也能正常工作的大多數設備,但對於華爲的設備,isPowerSaveMode()總是返回false。因此,由於前提條件失敗,提示不會顯示。

有其他人可能遇到過這個問題嗎?如果是這樣,你做了什麼來解決它?

請注意,Xamarin.Android SDK中也存在相同的問題。

+0

有一種解決方法,已經描述[這裏](https://stackoverflow.com/questions/15133392/find-out-if-power-saving-mode-enabled-android-sdk) – Ch4t4r

+0

@ Ch4t4r謝謝爲鏈接。它雖然不能解決我遇到的問題。 – Demitrian

+0

您確定它與手機上安裝的Android版本無關嗎?如果是的話,你可以試試這段代碼嗎? PowerManager powerManager =(PowerManager) getActivity()。getSystemService(Context.POWER_SERVICE); 如果(android.os.Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP && powerManager.isPowerSaveMode()){ } – hugoterelle

回答

1

每個oem修改SDK以滿足他們的需求。華爲設備不使用默認的節電功能,而是使用名爲「受保護的應用」的東西。受保護的應用程序是一組即使在屏幕關閉時也可以運行的應用程序。所以這就是它總是返回錯誤的原因。它更好地拋出保護應用程序屏幕的意圖,但沒有辦法知道您的應用程序是否被添加到受保護的應用程序列表。 What is protected apps ?

0

我在實現手持設備和可穿戴設備時遇到了同樣的問題。 我發現的唯一解決方案是爲所有應用程序禁用節電模式。 我建議在禁用所有應用程序的這種模式後檢測您的方法的結果。這個錯誤只出現在華爲。可怕的供應商。