Android BLE:将ScanResult timestampNanos转换为System nanoTime

时间:2015-09-01 18:00:29

标签: android bluetooth timestamp bluetooth-lowenergy

扫描蓝牙低功耗数据包时,我收到ScanCallback并设置了ScanResult。我可以使用result.getTimestampNanos()获得“观察扫描结果时的设备时间戳”,但这次没有与Systems.nanoTime()对齐。有没有办法从一个转换到另一个?

2 个答案:

答案 0 :(得分:4)

使用以下代码通过使用SystemClock.elapsedRealtime()将getTimestampNanos()转换为系统millis:

long rxTimestampMillis = System.currentTimeMillis() - 
                         SystemClock.elapsedRealtime() +
                         scanResult.getTimestampNanos() / 1000000;

这可以很容易地转换为Date对象:

Date rxDate = new Date(rxTimestampMillis);

然后你把时间作为一个字符串:

String sDate = new SimpleDateFormat("HH:mm:ss.SSS").format(rxDate);

答案 1 :(得分:1)

更优雅的方法

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