잠든 화면을 깨우는 일은 push 를 받거나 알람을 울리거나 등 사용자가 디바이스를 사용하지 않는 상태에서 앱을 실행해야할 경우 사용할 수 있다.


선행작업 : BroadcastReceiver 등이 선언되어 있어야 한다. (본문에는 생략됨)

 



 

 

잠금 화면 위로 activity (액티비티) 를 띄워줄 수 있다.

잠금화면 위에서 실행하고 싶은 activity (액티비티) 의 onCreate 함수에 해당 옵션을 준다.

1
2
3
4
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
cs


FLAG_KEEP_SCREEN_ON : Screen 을 켜진 상태로 유지
FLAG_DISMISS_KEYGUARD : Keyguard를 해지
FLAG_TURN_SCREEN_ON : Screen On

FLAG_SHOW_WHEN_LOCKED : Lock 화면 위로 실행

 

 



 

 

잠든 화면을 깨워 보자.

PowerManager 클래스를 이용한다.

 

최초 push 를 받는 곳이나 BroadcastReceiver 클래스가 있을 것이다.

거기에서 실행하면 된다.

BroadcastReceiver 사용중이라면 1# 은 전역변수로, 3# ~ 18# 은 onReceive에 추가하면된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    private static PowerManager.WakeLock sCpuWakeLock;
 
        if (sCpuWakeLock != null) {
            return;
        }
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        sCpuWakeLock = pm.newWakeLock(
            PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
                        PowerManager.ACQUIRE_CAUSES_WAKEUP |
                        PowerManager.ON_AFTER_RELEASE, "hi");
 
        sCpuWakeLock.acquire();
 
       
        if (sCpuWakeLock != null) {
            sCpuWakeLock.release();
            sCpuWakeLock = null;
        }
cs

1# : PowerManager.WakeLock 빈객체 선언한다.

6# : 시스템에서 PowerManager 객체를 받아온다.

7# : PowerManager  객체에 제어레벨을 선언한다.

12# : acquire 함수를 실행하여 앱을 깨운다. ( cpu 를 획득하는 ? 뭐 이런내용을 본적이 있어요)

16# : acquire 함수를 사용하였으면 꼭 release 를 해주어야 한다. cpu를 점유하게 되어 배터리 소모나 메모리 소모에 영향을 미칠 수 있다.

 

 

다음과 같이 manifests에 permission (퍼미션) 을 선언해주어야 한다.

1
<uses-permission android:name="android.permission.WAKE_LOCK" />
cs

 

 

 

위 방법을 사용하여 잠든 디바이스를 깨우고 특정 activity를 잠금화면 위로 실행시킬 수 있다.

 

by 개발자 CofS 2016.03.30 15:09
  • Favicon of http://blog.daum.net/andro_java/ BlogIcon 김병희 2016.09.08 03:50 신고 ADDR EDIT/DEL REPLY

    필요한데 발견해서 얼마나 반가운지 ...
    정말 감사합니다.
    제 블로그에 올려 소개해도 될까요?

  • 개똥벌레 2016.10.08 01:31 신고 ADDR EDIT/DEL REPLY

    해당자료를 발견하여 정말 반갑습니다.
    그런데 어떻게 붙혀써야할지 감이안오네요..ㅠㅠ
    괜찮으시면 소스 파일을 볼수있나여?

    • Favicon of https://cofs.tistory.com BlogIcon 개발자 CofS 2016.10.10 09:43 신고 EDIT/DEL

      소스는 드리고 싶어도 예제형식으로 만들어놓은게 없어서 ㅠㅠ
      붙히는 방법은 본문 추가된 내용을 보시면 감이 오실것 같습니다.
      해당 소스가 어디에 작성되어야 하는지 기술해놓았습니다 ^^

  • 니버 2017.02.16 21:37 신고 ADDR EDIT/DEL REPLY

    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    여기서 context 빨간색으로 뜨는데 어떻게 처리해야 하나요? 부탁드립니다.

    • Favicon of https://cofs.tistory.com BlogIcon 개발자 CofS 2017.02.17 09:22 신고 EDIT/DEL

      https://developer.android.com/reference/android/os/PowerManager.html

      이곳을 보고 참조하여 만든 소스이니 이곳을 보시면 도움이 되실까 싶습니다 ^^;