2014년 4월 30일 수요일

android - Custom Lock Screen

Custom Lock Screen

안드로이드는 루팅하지 않은 단말기에서 락스크린을 교체할 수 없다. 런처처럼 정상적인 방법으로 대체하는 방법을 제공하지 않는다.

다만 Android 4.2 부터 락스크린에 위젯을 표시할 수 있는 락스크린 위젯 기능이 추가되었다.
하지만 4.1 이하 단말기에서는 사용할 수 없다.

Android Version에 영향을 덜 받고 원하는 화면을 락스크린에 표시할 방법은 없을까?
락스크린과 유사한 동작을 하는 어플을 만들고자 한다면 필요한 기능은 무엇일까?

  • 기존의 락스크린이 표시되거나 해제되는 시점을 알 수 있어야 한다. 최소한 락스크린이 표시되는 시점은 알아야 한다.
  • 기존의 락스크린 위에 화면을 표시 할 수 있어야 한다.
  • 기존의 락스크린을 해제할 수 있으면 좀더 유연한 동작이 가능할 것 같다.
  • 보안이 설정된 락스크린은 어떻게 처리하는게 바람직한가?
  • 전화, 메시지, 기타 락스크린을 사용하는 알림 기능에 대해 대처해야 한다.


구현이 가능한지 여부를 확인해보자.

락스크린의 상태변경에 대한 콜백기능이 없다.

SCREEN_ON, SCREEN_OFF 상태를 브로드캐스트 메시지로 수신할 수 있다. 다만 코드로 등록하는 경우만 해당 메시지 수신이 가능하여 통상 서비스를 이용한다.

서비스는 LMK에 의해 종료될 수 있기에 SLEEP 상태에서 화면 On/Off 메시지를 수신할 방법이 필요하다.
AlarmManager를 이용하여 주기적으로 서비스 구동요청을 할 수 도 있고 foreground service 기능을 사용할 수 도 있다.

Android 5 부터 WindowManager.LayoutParams의 FLAG_SHOW_WHEN_LOCKED 플래그 설정으로 락스크린 위에 표시되는 액티비티를 지원했다.

Android 1 부터 KeyguardManager를 이용해 보안이 적용되지 않은 락스크린을 해제하는 기능을 제공했으며 이 기능을 Android 5 부터는 WindowManager.LayoutParams의 FLAG_DISMISS_KEYGUARD 플래그 설정으로도 제공하고 있다.


결론 

화면 On/Off 시점을 알고 액티비티를 락스크린 위에 표시하는 기능과 기존 락스크린을 해제할 수 있는 기능을 조합해 기존 락스크린을 어느정도 대체할 수 있고 이를 이용한 많은 락스크린 앱들이 플레이 스토어에 올라와 있다.

락스크린과 유사한 UX를 구현하고 보안 락이 걸려있지 않은 경우 기존의 락 스크린을 해제하여 락스크린 기능을 대체하여 사용할 수 있다.

개인적인 사견으로는 정상적인 방법으로 락스크린 자체를 대체하는 방법을 제공하지 않는데는 보안문제가 가장 큰것 같다.



댓글 없음:

댓글 쓰기