2011-10-14 14 views
5

मैं सेंसरएवेंट डेटा से टाइमस्टैम्प मान पढ़ रहा हूं लेकिन मैं इन मानों के संदर्भ समय को काम नहीं कर सकता। Android दस्तावेज़ सिर्फ कहते हैं, "nanosecond में समय है, जिस पर घटना हुआ" एक उदाहरण के रूप:एंड्रॉइड सेंसर टाइमस्टैम्प संदर्भ समय

मेरे वर्तमान एंड्रॉयड डिवाइस तारीख 14 अक्टूबर 2011 23: 29: 56.421 (GMT + 2)

System.currentTimeMillis * 1000000 (नैनोसेक) = 1318627796431000000 (यह ठीक है)

सेंसरेंट.timestamp (नैनोसेक) = 67578436328000 = 1 9 घंटे 46 मिनट ????

क्या आप मेरी मदद कर सकते हैं?

धन्यवाद

+0

यहाँ देखें: http://stackoverflow.com/questions/3498006/sensorevent-timestamp-to-absolute-utc-timestamp – goto10

उत्तर

3

ऐसा लगता है कि तुम क्या साथ काम कर रहे भी "सक्रिय रहने की अवधि" के रूप में जाना जाता है, के बाद से ऑपरेटिंग सिस्टम शुरू कर दिया नैनोसेकंड की संख्या है।

मुद्दे पर आगे की जानकारी: http://code.google.com/p/android/issues/detail?id=7981

मैं जोड़ने चाहिए कि जुड़ा हुआ सवाल एक ही मुद्दे के साथ SensorEvent.timestamp to absolute (utc) timestamp? सौदों और जहां मैं इस सवाल का जवाब मिल गया है।

+1

धन्यवाद goto10 और manu3d, अंत में जवाब यह है कि टाइमस्टैम्प समय nanosecs में डिवाइस के सक्रिय रहने की अवधि है। –

+2

यह हमेशा नहीं होता है। मेरे नेक्सस 4 पर, यह युग के बाद से नैनोसेकंड (1 9 70 की शुरुआत) है। शायद यह अनुमान लगाकर अनुमान लगाया जा सकता है कि सेंसरवेन्ट को जल्दी से संसाधित किया जा रहा है और इसे अपटाइम और 1 9 70 की शुरुआत के खिलाफ परीक्षण किया जा रहा है। – davtom

1

मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन, मैं SensorEvent.timestamp को मानव पठनीय समय में बदलने के लिए भी संघर्ष कर रहा हूं। इसलिए मैं यहां लिख रहा हूं कि अब तक मुझे क्या समझ आया है और मैं आपसे बेहतर समाधान प्राप्त करने के लिए इसे कैसे परिवर्तित कर रहा हूं। किसी भी टिप्पणी का स्वागत किया जाएगा।

जैसा कि मैंने समझा, SensorEvent.timestamp डिवाइस के बूट-अप के बाद एक विलुप्त समय है। तो मुझे डिवाइस के अपटाइम को जानना है। तो अगर कोई एपीआई रिटर्निंग डिवाइस बूट-अप है, तो यह बहुत आसान होगा, लेकिन, मुझे यह नहीं मिला है। तो मैं डिवाइस के अपटाइम को 'अनुमान' करने के लिए SystemClock.elapsedRealtime() और System.currentTimeMillis() का उपयोग कर रहा हूं। यह मेरा कोड है।

private long mUptimeMillis; // member variable of the activity or service 
... 
atComponentsStartUp...() { 
    ... 
    /* Call elapsedRealtime() and currentTimeMillis() in a row 
     in order to minimize the time gap */ 
    long elapsedRealtime = SystemClock.elapsedRealtime(); 
    long currentTimeMillis = System.currentTimeMillis(); 

    /* Get an uptime. It assume that elapsedRealtime() and 
     currentTimeMillis() are called at the exact same time. 
     Actually they don't, but, ignore the gap 
     because it is not a significant value. 
     (On my device, it's less than 1 ms) */ 
    mUptimeMillis = (currentTimeMillis - elapsedRealtime); 
    .... 
} 
... 
public void onSensorChanged(SensorEvent event) { 
    ... 
    eventTimeMillis = ((event.timestamp/1000000) + mUptimeMillis); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(eventTimeMillis); 
    ... 
} 

मुझे लगता है कि यह ऐप्स के लिए काम करता है कि एक मिलीसेकंद समय त्रुटि ओकी है। कृपया, अपने विचार छोड़ दें।

+0

SystemClock.elapsedRealtimeNanos() वह एपीआई है जिसे आप ढूंढ रहे हैं, डिवाइस के स्थानीय समय संदर्भ = सिस्टम में सेंसरटाइमस्टैम्प .currentTimeMillis() + ((event.timestamp-SystemClock.elapsedRealtimeNanos())/1000000L); –

+0

क्या आपको लगता है कि mupptimeMillis समय के साथ बदलता है (एक बूट में)? आप कॉम्पोनेंट्स स्टार्टअप के लिए किस फ़ंक्शन का उपयोग करते थे? –

संबंधित मुद्दे