Android Wear表盘保持屏幕

时间:2015-01-04 22:26:39

标签: android wear-os watch-face-api

我正在使用官方的Android表面API,我希望在动画期间保持屏幕开启几秒钟,以便在动画期间屏幕不会进入环境模式,一旦动画完成,我想重置一切恢复正常,这可能吗? 我的类扩展了CanvasWatchFaceService,我也扩展了CanvasWatchFaceService.Engine 所以我想要一些与此类似的东西,但需要一个表面:

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

然后这个:

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

你也可以使用" setKeepScreenOn(true)"保持屏幕开启的方法,假设你有一个(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来再次设置KeepScreenOn(false):

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

       }
                    });