android | 꺼진 화면에서 앱 실행하기 / 잠든 화면 깨우기 / 잠금 화면 위로 실행/

2016. 3. 30. 15:09mobile/android

 

 

 

 

잠든 화면을 깨우는 일은 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를 잠금화면 위로 실행시킬 수 있다.