[Android]JJYEmulator电波表对时APP时区Timezone问题
标签:
it情感文化娱乐杂谈 |
分类: 小程序菜鸟 |
在内陆/干扰严重区域使用电波表,会面临收波问题,可以找到BPC、JJY等授时电波模拟软件/APP实现校时。针对JJY(樱花2局),则有starstonesoft.com网站上的PC端JJY_Simulator;苹果/安卓市场中的JJYEmulator;另外还有网页版(如:https://shogo82148.github.io/web-jjy/)、github网站上的开源软件等。
1.在具备微机的情况下,首先推荐PC端JJY_Simulator(免费软件,用于Windows Vista、7、8、10的无线电时钟JJY模拟器,https://www.starstonesoft.com/download/JJYS_v105/JJY_Simulator.zip)。在操作界面上有调整发送时间的按钮,把发送时间加一小时,手表调整时差设置为GMT+8(北京)时区则成功对时。界面如下。
2.还试用过JJYEmulator ver1.5.2(9) (安卓版),因为不能调整发送时间,使用有些繁琐:在手表已调整时差为北京时区的情况下,首先要把手机的时区设为GMT+9时区,这样手机时钟就会快一个小时;对时完毕后再将手机的时区恢复。界面如下(左面樱花语言,显示元素都有重叠情况)。
3.对于完美强迫症患者来说,还要修改手机时区,不能忍。小白恶补了几天APK反编译、JAVA和SMAIL代码,找齐各种工具,开始除草。
反编译后翻翻JAVA源码中有关获取时间的部分。
文件:jp\houryo\jjyemulator\MainActivity$1.class
Calendar localCalendar = Calendar.getInstance();
int i3 = localCalendar.get(13);
3.1
引用网络说法,“无论设置怎样的时区,calendar拿到的时间(用毫秒表示的那个long类型数字)其实都是一样的,只不过在将这个数字转换成小时、分钟的时候,会用到默认时区(当前系统)去进行转换”。
小白一拍脑袋:手机时区不想手动改,那直接把获得的当前时间加1小时(简单直接)。
3.1.1
语句
Calendar localCalendar = Calendar.getInstance();
localCalendar.add(10,
1);
3.1.2 对smail代码一窍不通,用java2smail工具转成smail代码插入相关文件。
文件:jp.houryo.jjyemulator\smali\jp\houryo\jjyemulator\MainActivity$1.smail,相关代码如下:(博客系统不支持特殊符号,导致长语句截断,只好截图)
在.line 61上方插入以下代码,注意选择寄存器,不能干扰后面代码运行。
3.1.3 编译生成APK,经测试实现发送时间加1小时,基本实现设想:在国内用没有问题。
3.2 前面说了,完美强迫症重度患者,肯定不会满意当前结果:在其他时区还有问题。
3.2.1 翻翻网络经验,修改app内默认时区为GMT+9,再转换处理时间,无视手机当前时区设置。代码如下:
TimeZone timeZone = TimeZone.getTimeZone("Asia/Tokyo");
TimeZone.setDefault(timeZone);
Calendar localCalendar = Calendar.getInstance(timeZone);
3.2.2 转成smail代码插入文件MainActivity$1.smail(.line 60下方,原来的2行删除),如下所示:
3.2.3 顺便把樱花界面汉化:
修改MainActivity.smail和MainActivity$1.smail文件中的语句
const-string v1, "ja"
"ja"改为"zh"
类似含有UTF8编码的字符串
const-string v2, "\u571f"
自行转码对照原界面修改
3.2.4 修改res目录下的activity_main.xml文件(有2个),调整UI中各元素相对位置、字体大小以及汉化字符串。
3.2.5 重新编译生成APK,界面如下:
发送校时电波时间(GMT+9)比手机时间(GMT+8)快1小时。
折腾几天,症状缓解。想想现在的手表凌晨能正常接收到JJY电波、信号强度H,自动对时,先静静。

加载中…