마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

화면깨우기 어떻게 해야하죠?ㅠ

0 추천
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.ON_AFTER_RELEASE
        | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");

위에 소스를 액티비티에 넣고 화면 깨울려고 

wakeLock.acquire(); 써봣는데...

앱켜지자마자 오류나면서 꺼지네요 ㄷㄷ

화면깨우기 어떻게 하는거죠? ㅠㅠ

익명사용자 님이 2015년 11월 22일 질문

1개의 답변

0 추천

1. 클래스 추가

package kr.co.multi.beacontest;

import android.content.Context;
import android.os.PowerManager;

public class AlarmWakeLock {
    private static PowerManager.WakeLock mWakeLock;

    public static void wakeLock(Context context) {
        if (mWakeLock != null) {
            return;
        }
        PowerManager pm = (PowerManager) context
                .getSystemService(Context.POWER_SERVICE);

        mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                | PowerManager.ACQUIRE_CAUSES_WAKEUP
                | PowerManager.ON_AFTER_RELEASE, "MyWake");
        mWakeLock.acquire();
    }

    public static void releaseWakeLock() {
        if (mWakeLock != null) {
            mWakeLock.release();
            mWakeLock = null;
        }
    }
}

2. 서비스쪽에 onCreate에 추가

MainActivity.mActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

이때 mActivity는 필자의 경우 activity 클래스에서 Activity mActivity = this; 를 static으로 받아왔다.

activity 클래스에서 한다음에 서비스에서 요청하는 방식으로 해도 될꺼다 아마...

참고로 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 이것도 추가하는 사람이 많던데 이거 쓰면 화면이 안꺼진다... 왜 쓰는지...;;

3. 화면을 깨우기 원하는 곳에 써주자 물론 필자의 경우 서비스 클래스에서

AlarmWakeLock.wakeLock(MainActivity.mActivity);
AlarmWakeLock.releaseWakeLock();

 

결국 자문자답의 형태로 문제를 해결하게 되었는데 인터넷의 여러가지 방법중에서 필자는 겨우 되는걸 발견

익명사용자 님이 2015년 11월 22일 답변
근데 wakeLock을 풀때 쓰는 AlarmWakeLock.releaseWakeLock(); 이부분이 없으면
화면이 안꺼지는건 알겠는데
TimerTask task = new TimerTask() {                 

@Override                

public void run() {

PushWakeLock.releaseCpuLock();

}        

};

Timer timer = new Timer(); timer.schedule(task, 500);

요런식으로 쓰는 사람도 있었다..
필자는 그런적이 없는데 wakeLock 걸어주는것보다 releaseWakeLock이 먼저 실행되는 사람도 있나요?
...