2012. 5. 8. 23:12

[펌] 안드로이드 - LockScreen 만들기

출처: http://blog.naver.com/PostView.nhn?blogId=multikth&logNo=150109761153


 FC 포르테님이 작성한 글을 퍼왔습니다. 이렇게 복사해 오는 이유는 블로그 내에서 검색이 되도록 하기 위함입니다.


안드로이드폰에서 hold키를 누르면 순정 lockscreen으로 화면이 잠긴다.

이 락스크린을 개발자가 직접 건드릴수는 없으므로 가짜(?) 락스크린을 만들어 넣는 방법을 생각해 볼 수 있다.

 

LockScreen.java에서 Activity를 상속 받고,

onCreate메소드에서

WindowManager를 통해 플래그를 주었다...

 

 - onCreate()

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|

                              WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

 

setContentView(R.layout. .....);

 

위 플래그를 통해 홀드키를 누르면 안드로이드 순정 락스크린이 걸린상태에서 그 위에

LockScreen.java 액티비티를 띄우게 된다.

 

나는 서비스를 돌리고, 서비스에서 브로드캐스트 리시버를 통해 "Intent.ACTION_SCREEN_OFF" 브로드캐스트가 수신됐을때

(즉, 화면이 꺼졌을때) startActivity(new Intent(new, LockScreen.class)); 와 같은 형식으로 락스크린 액티비티를 호출해줬다.

그러면 화면이 꺼지고 안드로이드 순정 락스크린이 걸린 상태에서 그 위에 LockScreen.java 액티비티가 호출되어 있을 것이다.

 

이상태에서 다시 홀드키를 눌러 화면을 켜게되면 원래는 순정 락스크린이 떠 있어야 하지만, onCreate에서 추가해준 플래그에 의해

순정 락스크린이 떠있는 상태에서 그 위에 LockScreen.java 액티비티가 떠있게 되므로, 사용자 입장에서는

그것이 락스크린이 된다. 거기서 락을 해제할수있는 버튼을 하나 만들어서 그 버튼을 눌렀을때

LockScreen.java 액티비티는 onPause쯤에서 finish() 호출해서 액티비티를 종료 시키고,

아래 코드를 추가하면,

 

KeyguardManager km = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);

KeyguardManager.KeyguardLock keyLock = km.newKeyguardLock(KEYGUARD_SERVICE);

keyLock.disableKeyguard(); //순정 락스크린 해제

 

이렇게 해주면 순정 LockScreen이 종료 되면서 순정 락스크린도 함께 해제되어

모르는사람은 그게 진짜 락스크린처럼 보일 것이다..

 

위에서 사용한 코드(KeyguardManager를 사용하려면 AndroidManifest.xml에서 퍼미션을 추가해줘야 사용 가능하다.

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

 

반대로 락을 다시 걸어주는 방법은

keyLock.reenableKeyguard();를 호출해주면 순정락화면으로 잠긴다.

이때도 마찬가지, reenableKeyguard를 호출해 순정락화면으로 잠궈버리고,

다시 startActivity로 LockScreen.java액티비티를 호출하면 자연스럽게

onCreate에서 추가해준 플래그에 의해 락스크린위에 LockScreen.java 액티비티가 위로 올라가기 때문에

락스크린으로써의 기능(?)을 다 할수가 있다.

 

좀더 유연하게 쓰려면 여러가지 살을 좀 붙여야겠지만. 이정도만해도 충분히 락스크린을 만들 수 있다.

 

어떤 블로그나 자료를 보면 onCreate에서 추가한 플래그들이 락스크린을 해제 해주는 코드라고 하는데..

정확하게 말해서 락스크린을 해제 해주게 아니라, 락스크린이 안풀린 상태에서 그 위에 또다른 액티비티가 올라가기 때문에

락이 해제된 것 처럼 보일 뿐이다.

 

 

-혼자 공부하려고 쓴 포스트이니... 태클은 정중히 사양하겠습니다...