2011-02-08 17 views
6

मेरे ऐप में मैं एक्सेलेरोमीटर आराम से समय की मात्रा को मापना चाहता हूं।एंड्रॉइड - लंबी अवधि में समय की गणना कैसे करें

उदाहरण के लिए, यदि मैं 0.4 मीटर/एस की दहलीज निर्धारित करता हूं और एक्सेलेरोमीटर की गति हमेशा नीचे होती है तो इसका मतलब है कि फोन बाकी है (थ्रेसहोल्ड मूल्यों में जिटर के लिए खाता है)।

मैं उस समय की गिनती करने में सक्षम होना चाहता हूं जब फोन बाकी है और बाकी समय पर आराम से पहुंचने पर, उस घटना पर प्रतिक्रिया दें।

मेरे पास पहले से ही एक्सेलेरोमीटर ठीक काम कर रहा है, मुझे बस इस समय गिनने की जरूरत है और मैं यह कैसे अपरिचित हूं, क्या कोई मेरी मदद कर सकता है? अग्रिम धन्यवाद

समाधान:

start = System.currentTimeMillis(); 

    if (vectorTotal > 10.1 || vectorTotal < 9.5){ 
     timelimit = (System.currentTimeMillis()+ 10000); 
    } 
    else if (start >= timelimit){ 
     checkUser(); 
     timelimit = (System.currentTimeMillis()+ 10000); 
    } 

उत्तर

6

अग्रभूमि पर अपने अनुप्रयोग है?

शुरू में

:

long start = System.currentTimeMillis(); 

सहेजें डेटाबेस में या वरीयताओं में यदि आवश्यक हो तो यह मान।

अंत में:

long end = System.currentTimeMillis(); 

तब:

long passedTime = end - start; 
+0

अलार्ममेनगर क्लास के साथ कुछ बदसूरत मुद्दों के बाद, मैंने इसे इस तरह से आजमाया और मुद्दों के बिना यह बहुत आसान था, चीयर्स साथी! – bobby123

0

मुझे लगता है कि आप शायद एक दोहरी सेवा/गतिविधि समाधान जहां सेवा पृष्ठभूमि में चलता है गिनती जो कुछ भी आप की गणना करना चाहते हैं और देख रहे हैं जब यह इसके लिए पूछता है तो गतिविधि को यह जानकारी प्रदान करना।

जहां तक ​​गिनती का समय है, वह आसानी से System.currentTimeMillis() से डीकेआईटी एंड्रॉइड पॉइंट्स के रूप में वापसी में हेरफेर कर रहा है।

1

हर बार जब आप थ्रेसहोल्ड से ऊपर होते हैं तो अलार्म सेट कर सकते हैं और जब अलार्म अंत में आग लग जाता है तो आप जो कुछ भी चाहते हैं उसे करते हैं।

कुछ इस तरह करते हैं, जब आप अपने गतिविधि शुरू:

am = (AlarmManager) getSystemService(ALARM_SERVICE); 
timeoutInMillis = 60000; 
Intent timeoutIntent = <create the intent you want to run here>; 
timeoutPendingIntent = PendingIntent.getService(this, 0, timeoutIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

और उसके बाद हर accelerometer अपने सीमा से ऊपर है:

am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeoutInMillis, timeoutPendingIntent); 

मत भूलना अलार्म स्पष्ट करने के लिए जब आप बाहर निकलने के अपने गतिविधि:

am.cancel(timeoutPendingIntent); 
+0

उत्तर गेटेखा के लिए धन्यवाद, बहुत उपयोगी, मुझे अलार्म मैनेजर के साथ कुछ समस्याएं थीं जब मुझे इसकी आवश्यकता नहीं थी और मेरे श्रोताओं को अपंजीकृत कर रहा था, 1 अलार्म हमेशा उसी लंबित पर am.cancel का उपयोग करते समय भी सेट रहता है INTent डीकेआईंडैंड्रॉइड की विधि का इस्तेमाल किया। कोड उदाहरणों के लिए उपरोक्त! – bobby123

0

आप

का उपयोग कर सकते हैं

सेवा में आप एक्सेलेरोमीटर से ईवेंट सुनते हैं, प्रत्येक घटना पर आप पिछले अलार्म को रद्द करते हैं और नया सेट करते हैं। कुछ निश्चित समय तक पहुंचने पर - आपको अलार्म से मंशा मिलेगा।

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