[英]System.exit(0) in Android Wear Watchface?
我已经读过Java和Android时System.exit(0)
使用System.exit(0)
,但是到目前为止,我找不到能替代的方法。 明确地说,这是针对Watchface的,它只是扩展CanvasWatchFaceService
的服务。 在这种情况下,我无法调用finish()
。 我也尝试了stopService
和startService
,但均未成功。
我要解决的问题:众所周知,除非重新启动,否则设备表面上更改的时区不会反映在表面上。 在我的测试中,我发现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.