繁体   English   中英

Android Wear Watchface中的System.exit(0)?

[英]System.exit(0) in Android Wear Watchface?

我已经读过Java和Android时System.exit(0)使用System.exit(0) ,但是到目前为止,我找不到能替代的方法。 明确地说,这是针对Watchface的,它只是扩展CanvasWatchFaceService的服务。 在这种情况下,我无法调用finish() 我也尝试了stopServicestartService ,但均未成功。

我要解决的问题:众所周知,除非重新启动,否则设备表面上更改的时区不会反映在表面上。 在我的测试中,我发现System.currentTimeMillis()实际上并不响应Android Wear中的时区更改。 必须重新启动表面,以使其在更改时区后显示正确的时间。

所以我用以下代码构建了一个系统:

private final BroadcastReceiver timeChangeReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();

        if (!restarting) {
            if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
                if (upSeconds >= 15) {
                    System.exit(0);
                } else {
                    restarting = true;
                    int delay = ((15 - upSeconds) * 1000);

                    new CountDownTimer(delay, delay) {
                        @Override
                        public void onTick(long millisUntilFinished) { }
                        @Override
                        public void onFinish() {
                            System.exit(0);
                        }
                    }.start();
                }
            }
        }
    }
};

如果用户一次触发时区更改的频率超过15秒,则发生延迟。 Android Wear似乎会检测到过于频繁的系统退出,并用“简单”表盘代替表盘。

看起来效果很好,Android Wear会在退出时自动引导表盘恢复原状。 但是我最终希望将此应用程序放到Google Play商店中,因此我认为我应该确保自己在这里玩的不是火。

当正确的解决方案如此简单时,我简直无法完成所有工作。 感谢ianhanniballake提供的链接!

看完模拟表盘样本后 ,我发现我需要做的就是使用mCalendar.setTimeZone(TimeZone.getDefault()); 在许多地方,我直接将获取的时间(以毫秒为单位)与long now = System.currentTimeMillis();直接进行比较long now = System.currentTimeMillis(); ,所以我只是做了一个now = mCalendar.getTimeInMillis()来解决这个问题。

现在,更改时区后,表盘会正确更改时间。 我猜我下载的其他表面无法正确处理此问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM