App 개발 : 잠금화면- HomeKey Disable[View]

2014. 6. 12. 14:52프로그래밍/안드로이드

홈키를 막는 첫번째 방법입니다.


우선 앞 포스팅에서 사설이 길었으니 바로 예제를 첨부하겠습니다.


ex_dpm(knightrun).zip


아래는 제 단말기에서의 실행화면입니다. (생각보다 괜찮네여... 진짜 조금 수정해서 사용할까...)


실행해보시면 이전 잠금화면 포스팅에서 사용한 예제와 동일하지만, 홈키가 동작하지 않는 것을 확인 할 수 있습니다.

  - 잠금화면에 사용된 이미지는 네이버 웹툰 나이트런입니다., 타이틀 넣고 싶었는데 놋북에 포샵이 없네여 ㅠㅠ


[홈키에 동작하지 않는 이유]

홈키에도 화면이 내려가지 않는 이유는 현재 사용되는 나이트런 잠금화면이 액티비티가 아닌 뷰이기 때문입니다.

홈키는 기본적으로 실행중인 액티비티를 전부 백그라운드로 내려버립니다.

하지만 상대가 액티비티가 아니라면, 당연 홈키의 기능에서 벗어날 수 있습니다.

또한 뷰는 뒤로가기 키를 통해 파괴되지도 않기 때문에 잠금시스템에서 필요한 '하드웨어 키' 제어를 할 필요도 없습니다.


[뷰의 실행]

뷰의 작성에 대해서는 설명하지 않겠습니다.

이미지 뷰를 사용하셔도 되고, surfaceview를 사용하셔도 됩니다. 

전 다른 목적이 있어 OpenGL을 사용해서 만들었습니다.


여튼, 액티비티를 뷰로 대체 하였기 때문에 기존의 Screen_off 리시버에서 호출되는 액티비티를 뷰로 대체해야 합니다.

쉽게 말해, 서비스에서 뷰를 띄우면 되는 거겠죠?


서비스에서 뷰를 띄우는 방법은 inflater를 이용하시면 됩니다. (소스참고)

또한 주의 하실점은, 등록시 뷰의 파괴를 꼭 고려하셔야 합니다.

만약 뷰를 파괴하는 방법을 생각하지 않고 리시버에 뷰를 등록하시게 되면, 종료할 방법이 없어집니다.

단말기가 순식간에 벽돌로 변해버리는 거죠.


현재 포스팅에 사용된 나이트런 잠금화면은 단말기 화면 전체길이의 반이상(가로 또는 세로)을 터치&드래그 하면 종료됩니다.


이 방법의 장점과 단점

[장점]

  가. 개발이 쉽다.

  나. 별도의 입력이 필요없어 사용자가 쉽게 사용가능 하다.


[단점]

  가. 잘못 만들면 단말기가 벽돌화 된다.


또한, 현재 올려둔 잠금화면에는 두 가지 해결하지 않은 문제점이 있습니다.

하나는 서비스의 생명주기

나머지 하나는 단말기의 리부팅에 대해 고려하지 않은 것


두 가지다 기능 추가 및 수정으로 해결 가능하며, 방법도 쉽게 찾을 수 있습니다.

단, 두 번째 문제는 Application Level 에서 약간의 문제가 있습니다.


혹시나 단말기에서 테스트 하다 문제가 생긴다면, 단말기를 껏다 켜주세요.

그리고 댓글로 알려주세요.