java - Android Wear 无法唤醒屏幕

标签 java android wear-os

我正在开发一个表盘,它已启动并运行,但当我将它放在 360 上时,它对交互的响应速度变得很慢。

我应该注意,屏幕会在收到通知时唤醒,但在转动手腕查看时间时不会唤醒。

我做的最后一件事是将代码从 doWork 移出并移入 CountDownRunner。下面是我的代码:

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.text.format.Time;
import android.support.wearable.view.WatchViewStub;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Date;

public class ClockActivity extends Activity {

private TextView mTextView;
private Handler mHandler = new Handler();
private ImageView img;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_clock);

    Runnable runnable = new CountDownRunner();
    Thread myThread = new Thread(runnable);
    myThread.start();

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

class CountDownRunner implements Runnable{
    public void run() {
        while(!Thread.currentThread().isInterrupted()){
            try {
                Date dt = new Date();
                int hours = dt.getHours();
                int minutes = dt.getMinutes();
                int seconds = dt.getSeconds();
                String curTime = hours + ":" + minutes + ":" + seconds;

                img=(ImageView)findViewById(R.id.hand_second);
                RotateAnimation rotateAnimation = new RotateAnimation((seconds-1)*6, seconds*6,
                        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                        0.5f);

                rotateAnimation.setInterpolator(new LinearInterpolator());
                rotateAnimation.setDuration(1000);
                rotateAnimation.setFillAfter(true);

                img.startAnimation(rotateAnimation);
                runOnUiThread(new Runnable() {
                    public void run() {
                        try{

                        }catch (Exception e) {

                        }
                    }
                });
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }catch(Exception e){
            }
        }
    }
}

}

最佳答案

您不应该实现 Runnable 来更改可穿戴设备上的时间。使用 BroadcastReceiver(Intent.ACTION_TIME_TICKIntent.ACTION_TIMEZONE_CHANGEDIntent.ACTION_TIME_CHANGED)并在以下情况下收到“tick”:时间更改(消耗更少的电池电量和 CPU)。

此外,您必须管理屏幕状态(屏幕变暗、屏幕唤醒等)

这是适用于 Android Wear 的 Watchface 的一个很好的示例:http://www.binpress.com/tutorial/how-to-create-a-custom-android-wear-watch-face/120

最后一点提示,只有当您的可穿戴设备处于唤醒状态时,您才能管理表盘的秒数(例如 postdaleyed,但必须在您的可穿戴设备返回 sleep 模式时终止)。

关于java - Android Wear 无法唤醒屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26350122/

相关文章:

java - 具有并行 DataProvider 和随机顺序方法的 TestNG 套件 - 如何实现?

java - JTextPane 中的双列表项插入

android - 如何将 Activity 添加到选项卡?

wear-os - 将运动传感器数据从 Android Wear 获取到 Android 手机

java httpSession 在处理时失效

java - Java 代码在 Linux 平台上的调用约定是什么?

android - 将静态库链接到 Android 中的 JNI 共享库

java - 如何停止比例图像缩放?

Android Wear 应用程序崩溃并出现致命异常 : IntentService[CalendarQueryService]

wear-os - 无法通过蓝牙连接 Android Wear 设备