2016-07-09 62 views
0

我讀過使用System.exit(0)時談到Java和Android,但是到目前爲止,我無法找到替代品,我試圖完成。 要明確,這是一個Watchface,它只是一個延伸CanvasWatchFaceService的服務。在這種情況下,我不能撥打finish()。我也試過stopServicestartService沒有成功。Android Wear Watchface中的System.exit(0)?

我試圖解決的問題:衆所周知,除非重新啓動,否則更改設備上的時區將不會反映在錶盤上。在我的測試中,我發現System.currentTimeMillis()在字面上不會響應Android Wear中的時區更改。必須重新啓動錶盤以便在時區更改後顯示正確的時間。

所以我建用下面的代碼的系統:

private final BroadcastReceiver timeChangeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     final String action = intent.getAction(); 

     if (!restarting) { 
      if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { 
       if (upSeconds >= 15) { 
        System.exit(0); 
       } else { 
        restarting = true; 
        int delay = ((15 - upSeconds) * 1000); 

        new CountDownTimer(delay, delay) { 
         @Override 
         public void onTick(long millisUntilFinished) { } 
         @Override 
         public void onFinish() { 
          System.exit(0); 
         } 
        }.start(); 
       } 
      } 
     } 
    } 
}; 

的延遲情況下,用戶在同一時間觸發時區變化超過15秒更頻繁。 Android Wear似乎檢測出太頻繁的系統出口,並用「簡單」表面替換表面。

它似乎工作得很好,Android Wear在退出時自動啓動表面。但我最終希望將此應用放在Google Play商店中,所以我認爲我應該確保我不會在這裏玩火。

+0

你見過:http://stackoverflow.com/questions/11257449/system-exit-in-android?可能的重複。 –

+0

感謝您的鏈接!這有幫助,但它不能完全回答我的問題。我的問題是關於Android Wear中的CanvasWatchFaceService。 – nope4561759

+1

[watchface training](https://developer.android.com/training/wearables/watch-faces/drawing.html)上的所有代碼都可以處理時區更改。爲什麼你認爲你必須退出才能獲得更新時間? – ianhanniballake

回答

0

當我的解決方案非常簡單時,我無法相信我會經歷所有這些工作。感謝ianhanniballake的鏈接!

看完Analog Watchface Sample之後,我發現我需要做的只是使用mCalendar.setTimeZone(TimeZone.getDefault());。在很多地方我直接比較了用long now = System.currentTimeMillis();取得的毫秒數,所以我只是做了now = mCalendar.getTimeInMillis()來處理這個問題。

現在,當時區更改時,錶盤正確更改時間。我猜我下載的其他表面沒有正確處理這個!