2015-01-04 60 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) { 

     } 
        });