2011-02-08 7 views
6

내 앱에서는 가속도계가 정지하고있는 시간을 측정하고 싶습니다.안드로이드 - 장기간에 걸리는 시간을 계산하는 방법

예를 들어, 임계 값을 0.4m/s로 설정하고 가속도계 속도가 이보다 항상 낮 으면 전화기가 정지 상태에 있음을 의미합니다 (임계 값은 지터 값을 고려함).

나는 전화가 쉬고 일정 시간 동안 휴식을 취한 다음 그 이벤트에 반응하는 시간을 계산할 수 있기를 원합니다.

이미 가속도계가 작동 중입니다.이 시간을 계산해야하며이 작업을 수행하는 방법에 익숙하지 않습니다. 아무도 나를 도와 줄 수 없습니까? 미리 감사드립니다

솔루션 :

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

alarmmanager 클래스에 문제가 생겼을 때 나는 이런 식으로 시도했지만 문제없이 훨씬 간단했습니다. – bobby123

0

난 당신이 아마 서비스가 당신이 계산하고 싶은대로 계산 백그라운드에서 실행 이중 서비스/활동 솔루션을 찾고 생각 끝에

활동에 요청할 때이 정보를 활동에 제공합니다.

시간 계산과 관련하여 DKIT Android에서 지적한대로 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); 

을하고 매번 가속도계는 사용자의 귀의 이상 :

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

당신이 종료 할 때 알람을 해제하는 것을 잊지 마십시오 활동 :

am.cancel(timeoutPendingIntent); 
+0

답장을 보내 주셔서 감사합니다. 매우 도움이되었으므로 알람 관리자에게 몇 가지 문제가 생겼습니다. 더 이상 필요하지 않아서 청취자를 등록 취소 했으므로 동일한 보류 중 하나에서 am.cancel을 사용할 때도 항상 1 개의 알람이 유지됩니다. DKITandroid의 방법을 사용했습니다. 코드 예제에 대한 Upvote! – bobby123

0

서비스중인 경우 이전 이벤트를 취소하고 새로운 이벤트를 설정할 때마다 가속도계에서 이벤트를 수신합니다. 일정 시간이 지나면 알람으로 인해 의도를 갖게됩니다.

관련 문제