[펌] 안드로이드 - 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에서 추가한 플래그들이 락스크린을 해제 해주는 코드라고 하는데..
정확하게 말해서 락스크린을 해제 해주게 아니라, 락스크린이 안풀린 상태에서 그 위에 또다른 액티비티가 올라가기 때문에
락이 해제된 것 처럼 보일 뿐이다.
-혼자 공부하려고 쓴 포스트이니... 태클은 정중히 사양하겠습니다...
[출처] 안드로이드 - LockScreen 만들기|작성자 FC포르테