Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ScanResult时间戳字段-准确度如何?_Java_Android_Timestamp_Unix Timestamp - Fatal编程技术网

Java Android ScanResult时间戳字段-准确度如何?

Java Android ScanResult时间戳字段-准确度如何?,java,android,timestamp,unix-timestamp,Java,Android,Timestamp,Unix Timestamp,我一直在使用wifiManager.startScan();从附近的Wi-Fi接入点接收数据。这将作为扫描结果列表返回。该类可在以下位置找到: 我知道ScanResult的时间戳字段是 上次显示此结果时的时间戳(以微秒为单位)(自启动后) 看到了 因此,我使用一些计算来获得智能手机设备看到接入点的实际时间戳: long actualTimestamp = System.currentTimeMillis() - SystemClock.elapsedRealtime() + (scanResu

我一直在使用wifiManager.startScan();从附近的Wi-Fi接入点接收数据。这将作为扫描结果列表返回。该类可在以下位置找到:

我知道ScanResult的时间戳字段是

上次显示此结果时的时间戳(以微秒为单位)(自启动后) 看到了

因此,我使用一些计算来获得智能手机设备看到接入点的实际时间戳:

long actualTimestamp = System.currentTimeMillis() - SystemClock.elapsedRealtime() + (scanResult.timestamp / 1000);
这很好,但我有一些罕见的有趣的结果:

15:04:01 28-03-2016-1459173841

22:50:44 07-06-2016-1465336244

15:04:21 28-03-2016-1459173861

请注意以上2016年6月的条目,这是一个未来的日期,位于从列表中收集的其他读数中

这里会发生什么?我的代码有点错吗?时间戳值是否偶尔不准确?以前有人经历过吗


编辑:我正在Nexus5棉花糖设备上测试这个。MinSDK 18,Target 23我似乎有一个解释:这是一个bug

我偶尔会看到。时间戳(重新启动后的微秒数)将等于。seen(从新纪元开始的秒数)。现在,如果重新解释为微秒时间段,则纪元时间约为17天

由于两个值显然不能相等,我将其提交给Android: 请随时为本期杂志配角:)

这本适合我

long actualTime = System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(SystemClock.elapsedRealtimeNanos() - scanResult.getTimestampNanos(), TimeUnit.NANOSECONDS)

我得到了一些我也不信任的结果。我尝试过滤比X ms旧的结果,但我非常确定,结果会产生一个列表,其中包含不应该存在的扫描结果,或者包含不正确的信号强度(我的应用程序试图找到最佳接入点,并且在我开始转向另一个接入点之前,它始终选择最好的接入点)这让我相信信号电平和时间戳是不一致的。想想看。。也许会在AOSP bug追踪器上产生问题?@REJH因为这篇文章,我可以通过移动(走路、开车等)在一部手机上复制这个问题。时间戳最终将出现在未来。在另一台设备上,时间戳将保留在结果中,永远不会删除,这意味着它将永远过时。可以安全地假设,我们不能相信所有的结果,但我们可以过滤掉它们。开始扫描时记录,结束扫描时记录,然后仅选择该时间段之间的结果。My Samsung S6和S7将来也会偶尔返回时间戳。