안드로이드에서 paused, resumed 이벤트를 창단위로 수신하기 위한 팁

지도 모듈을 사용하는 창이 있는데, 지도에다 gps를 이용해서 위치를 계속 표시해줍니다.
그런데 이창을 켜놓고 O/S의 홈으로 가면 gps 사용을 중지하도록 이벤트를 걸었는데, 안드로이드는 먹통이더군요.

그래서 안드로이드의 puased, reseumd 이벤트를 수신하는 것을 찾아봤습니다.

이 포스팅에서 모듈을 소개하고 있는데, 이걸 하자고 모듈을 얹기는 부담되서 댓글을 보니,
고맙게도 Timan Rebel님이 간단하게 처리하는 방법을 개발해두셨더군요. (존경합니다.)

그래서 적용해봤어요. 일단 Context.js라는 library를 받아서 lib에 넣습니다.

그리고 적용할 window의 xml에 이벤트를 추가해요.

<Window id="mapWin" class="container" onOpen="onOpen" onClose="onClose">

그리고 iOS, Android 모두 동작할 수 있게 코딩을 합니다.
참고로 window이름이 map이라서 context의 on/off에 'map’을 준겁니다. 적절히 변형해서 적용하세요.

// 창 전환 이벤트 처리
var Context = require('Context');

function onOpen(evt) {
	// 위치 기능 켜기
	activateGPSTracking();

	Ti.App.addEventListener('resumed', addHandler);
	Ti.App.addEventListener('paused', removeHandler);

	if (OS_ANDROID) {
		Context.on('map', this.activity);
	} else {
		
	}
}

function onClose(evt) {
	if (OS_ANDROID) {
		Context.off('map');
	} else {
		removeHandler();
	}

	Ti.App.removeEventListener('resumed', addHandler);
	Ti.App.removeEventListener('paused', removeHandler);
}

전역 이벤트 리쓰너를 쓰기 때문에 잘 처리해주어야 합니다ㅎㅎ

1개의 좋아요