2017-11-14 4 views
0

GearVR 및 삼성 휴대 전화를 사용하여 VR 환경을 구축하고 있습니다.백그라운드에서 앱 실행 시간 계산

OnApplicationPause이 실행되고 그 후에 OnApplicationFocus이 실행될 때 앱이 백그라운드에서 얼마나 오래되었는지 알아 내려고했습니다.

나는 배경에서 그렇게하여 다음과 같은 간단한 '타이머'작동하지 않을 것입니다을하는 동안 앱에서 아무것도 처리하지 않는 것을 알고

private float pausedAt; 

void OnApplicationPause(bool pauseStatus) 
{ 
    pausedAt = Time.realtimeSinceStartup; 
} 

void OnApplicationFocus(bool hasFocus) 
{ 
    if (Time.realtimeSinceStartup > pausedAt + 60) { // 60 for 1 minute AFK 
     ResetExperience(); 
    } 
} 

이 작동하지 않는 것, 그래서 어떤 도움을 주시면 감사하겠습니다.

+0

시스템 시간을 잠시 멈추고 다시 시작하고 비교할 수 있습니다. 견고한 솔루션은 아니지만 괜찮은 사용자에게 도움이 될 것입니다. – Thalthanas

+0

@EmreE 그러나 시도했는데 제대로 작동하지 못했습니다 (안드로이드에서 PC에서 정상적으로 작동했습니다).하지만 다시 시도 할 것입니다. –

+0

@Giuseppe De Francesco가 GearVR 및 Samsung 전화에 관한 내용이므로 편집을 롤백해야했습니다. 또한'OnApplicationPause'와'OnApplicationFocus'는 안드로이드 장치에서 다르게 동작합니다. – Programmer

답변

1

현재 코드의 문제는 에 pausedAt 값도 표시되지 않는다는 것입니다. OnApplicationPause은 특정 시간에만 호출되므로이 작업을 수행해야합니다. 또한 Time.realtimeSinceStartup 대신 Time.time을 사용하십시오. 게임이 OnApplicationPause에 일시 정지하고 OnApplicationFocus(true)에서 다시 시작할 때 OnApplicationFocus(false)가 다시 시간을 얻을 때

Time.time과 함께 시간을 가져옵니다. 앱에서 백그라운드에서 기다렸던 실제 시간을 가져 오려면이 값을 빼십시오.

float pauseBeginTime; 
float focusTime; 

float totalTimeInBackground; 

void OnApplicationFocus(bool hasFocus) 
{ 
    //Detect return to game 
    if (hasFocus) 
    { 
     Debug.Log("Focused"); 

     focusTime = Time.time; 
     //Calculate how much waited in the background 
     totalTimeInBackground = focusTime - pauseBeginTime; 

     Debug.Log("Stayed in Background for " + totalTimeInBackground); 
    } 

    //Detect on-screen keyboard is enabled 
    else 
    { 
     setExitTime(); 
    } 
} 


void OnApplicationPause(bool pause) 
{ 
    //Detect Home button on Android 
    if (pause) 
    { 
     setExitTime(); 
    } 
} 

void setExitTime() 
{ 
    Debug.Log("Paused"); 
    pauseBeginTime = Time.time; 
} 
+0

사실, 내 코드는 괜찮 았고 작동합니다. 분명히 'OnApplicationFocus'는 앱이 다시보기로 돌아 왔을 때 전혀 호출되지 않았습니다 (이유가 무엇인지 알 수 없음). 그래서 앱에 함수를 호출하기 위해 Update에 조건을 추가했습니다. 앱이 포커스를 다시받을 때만 업데이트가 다시 시작되기 때문에 일시 중지되었습니다. –

+0

'OnApplicationFocus' 함수에서 매개 변수를 확인하지 않으므로 코드가 여전히 잘못되었으므로 실제로 작동하는지 여부는 중요하지 않습니다. 내 대답에서 말했듯이, 당신은 이것을해야만합니다. 그렇지 않으면 논리와 타이머가 엉망이 될 것입니다. OnApplicationFocus와 OnApplicationPause가 언제 어떻게 호출되는지 이해해야합니다. 나는이 순간 당신이 그렇게 생각하지 않습니다. 키보드를 꺼낸 다음 홈 버튼을 누르면 해당 코드가 실패합니다. – Programmer

+0

VR 경험이므로 아무도 장치에 액세스 할 수 없습니다. 아무도 상호 작용하지 않는 끊김없는 경험과 헤드셋이 켜져있을 때 재생되는 비디오입니다. –