2014-03-31 23 views
4

我有一個SW2應用程序,該應用程序擁有用戶選項以確定應用程序是否應使用低功耗模式(LPM)。哪些工作正常。問題是SW API只在第一次啓動時才調用我的應用程序的supportsLowPowerMode()註冊方法。這意味着如果用戶稍後更改了我的應用程序中的設置,它將在整個shebang重新啓動之後纔會生效。我已經嘗試了一些技巧(如殺死我的應用程序的進程)來強制重新加載,但目前爲止沒有任何工作。我的最後一招是告訴用戶他/她需要在生效之前重新啓動手機,但這很麻煩。有沒有更好的辦法?Sony SmartWatch 2:需要在運行時更改supportsLowPowerMode()

回答

1

解決方案不是嘗試在運行時將響應更改爲supportsLowPowerMode(),而是啓動和停止擴展。

基本上,如果你的分機可以曾經支持LPM,那麼就應該在返回一個supportsLowPowerMode()true值。如果擴展的LPM使用情況可能發生變化,您只需在onActiveLowPowerModeChange()處理程序中執行不同的操作即可處理該擴展。具體來說,如果用戶選擇不使用LPM,你想有一個處理程序,看起來像這樣:

@Override 
public void onActiveLowPowerModeChange(boolean lowPowerModeOn) { 
    super.onActiveLowPowerModeChange(lowPowerModeOn); 

    if (lowPowerModeOn) { 
     // User doesn't want to use LPM, so stop the app on the SW 
     stopRequest(); 
    } 
} 

這有設備的背光關閉時自動關閉系統擴展的效果,它會回落到其默認的LPM表面。

編輯:我重新開放,因爲我發現上述技術的不可接受的副作用。如果您的應用程序返回falsesupportsLowPowerMode(),則當手表進入睡眠狀態時,SW2會在後臺保持運行(但已暫停)。這意味着,當用戶「喚醒」SW2時,您的應用程序將立即重新出現在屏幕上。調用stopRequest()(就像我上面的代碼示例中)會中斷這種行爲,要求用戶在喚醒SW2之後重新打開您的應用程序。我沒有找到任何解決辦法。需要的是pauseRequest(),但API沒有。

1

據我所知在運行時沒有辦法改變它。讓我仔細檢查一下我的團隊,以防萬一有一種我不知道的方式。

+0

嗯。我以爲我昨天評論過這個,但現在已經消失了。針對你或團隊的後續問題:建議如何讓SW2重新載入supportsLowPowerMode()的返回值?有沒有什麼能夠重新啓動手機,這將觸發這種情況?謝謝! – String

+0

確認一旦擴展設置爲支持低功耗模式,則無需在運行時更改它,而無需重新啓動擴展。您不必重新啓動手機,只需退出擴展程序並重新啓動即可。不幸的是,退出然後重新啓動是目前唯一的解決方案。 – mldeveloper

+0

你是什麼意思的「退出延期」?我已經嘗試了所有從stopRequest()調用來在Android系統級別殺死我的進程,並且沒有任何可靠的工作。就好像這個值已經在主機端被緩存了,重啓之後的任何內容都不會刷新那個緩存。 – String