2015-01-04 95 views
3

我使用的是官方安卓手錶表情API,我想在動畫過程中保持屏幕亮幾秒鐘,以便屏幕在動畫過程中不會進入環境模式,動畫完成後,我想將所有的東西都恢復到正常狀態,這可能嗎? 我的類擴展CanvasWatchFaceService,我也延長了CanvasWatchFaceService.Engine 所以我想類似這種但是對於一個錶盤:Android Wear表面保持屏幕

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

那麼這個:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON). 

回答

3

你需要明確持有喚醒鎖:http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

獲取喚醒鎖,在完成動畫時保持屏幕亮起並釋放它。

這是一個關於清醒保持設備文件:https://developer.android.com/training/scheduling/wakelock.html

而且這裏有一個例子:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); 

WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, 
     "WatchFaceWakelockTag"); // note WakeLock spelling 

wakeLock.acquire(); 
+0

感謝它以這種方式工作,但我只有一個擔憂,那就是PowerManager.SCREEN_BRIGHT_WAKE_LOCK已被棄用,有沒有其他選擇? – sam

+0

我目前沒有任何意識到。 – gruszczy

0

您也可以使用「setKeepScreenOn(真)」的方法,以保持在屏幕上,比方說你有一個(根)的RelativeLayout在動畫發生:

private RelativeLayout rLayout; 

在OnCreate中()得到想要的佈局:

final WatchViewStub stub = (WatchViewStub)        
    findViewById(R.id.watch_view_stub); 
stub.setOnLayoutInflatedListener(new  
    WatchViewStub.OnLayoutInflatedListener() { 
     @Override 
     public void onLayoutInflated(WatchViewStub stub) { 

// rLayout是根佈局,其中動畫需要放置

rLayout = (RelativeLayout) stub. 
        findViewById(R.id.your_layout); 
      relativeLayout.setKeepScreenOn(true); 

然後你就可以在你的動畫setKeepScreenOn(假)設置AnimationListener再次:

yourAnimation.setAnimationListener(new 
    Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      if(animation.hasEnded()) 
       rLayout.setKeepScreenOn(false); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
        });