2015-01-04 3 views
3

Я использую официальный интерфейс API для Android, и я хочу сохранить экран на пару секунд во время анимации, чтобы экран не переходил в окружающий режим во время анимации и один раз анимация закончена, я хочу вернуть все в норму, возможно ли это? Мой класс расширяет CanvasWatchFaceService и я также продолжающий CanvasWatchFaceService.Engine Так что я хочу что-то похожее на это, но дляAndroid Wear watchface screen на

: циферблат
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

Тогда это:

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

ответ

3

Вы должны явно провести поминки lock: 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 (истинный)» метод, чтобы держать экран на, Допустим, у вас есть (Root) 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); 

ваша анимация Затем вы можете установить AnimationListener на анимацию в setKeepScreenOn (ложный) снова:

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) { 

     } 
        }); 
Смежные вопросы