- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] PowerManager, getWindow() 를 이용한 Screen On / Off 본문
[안드로이드] PowerManager, getWindow() 를 이용한 Screen On / Off
드럼치는한동이 2013. 5. 9. 14:37[스크린 on / off 기능]
스크린 on / off 개발로 인해 시중에 있는 여러 코드를 확인해 보니 하나 같이 제대로 동작하지 않는 코드들이 많았다. 어쩔 수 없이 새롭게 구현을 하였기에 많은 사람들이 스크린 on / off 기능으로 조금이나마 짜증내 하지 않았으면 좋겠다.
1. 알아 두어야 할 PowerManager flag
Flag_Value |
CPU |
SCREEN |
KEYBOARD |
PARTIAL_WAKE_LOCK |
On* |
Off |
Off |
SCREEN_DIM_WAKE_LOCK |
On |
Dim |
Off |
SCREEN_BRIGHT_WAKE_LOCK |
On |
Bright |
Off |
FULL_WAKE_LOCK |
On |
Bright |
Bright |
일반적으로 PowerManager 는 위와 같은 flag 를 사용한다. CPU 를 유효상태로 만든다던가, 화면을 밝게 만든다던가 등의 옵션이 담겨져 있다.
또한, PowerManaer 를 이용하기 위해서는 다음과 같은 권한을AndroidManifest.xml 에 설정해주도록 한다.
<uses-permission android:name="android.permission.WAKE_LOCK"/>
이 Wake_Lock 권한이 있어야 비로소 PowerManager 를 이용할 수 있다.
그렇다면, 바로 PowerManager 를 사용하기 위한 코드.
다음과 같이 클래스를 만들어 준다.
public class AlarmWakeLock {
private static final String TAG = "AlarmWakeLock";
private static PowerManager.WakeLock mWakeLock;
public static void wakeLock(Context context) {
if(mWakeLock != null) {
return;
}
PowerManager powerManager =
(PowerManager)context.getSystemService(
Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(
PowerManager.FULL_WAKE_LOCK, TAG);
mWakeLock.acquire();
}
public static void releaseWakeLock() {
if(mWakeLock != null) {
mWakeLock.release();
mWakeLock = null;
}
}
}
사용하는 방법은 어디서든지 다음과 같이 메소드를 호출하면 된다.
Screen On : AlarmWakeLock.wakeLock(Context);
Screen Off : AlarmWakeLock.releaseWakeLock();
이제 어디서든 해당 클래스의 Static 메소드를 호출하면 이용할 수 있다. 하지만, 일반적인 인터넷에서는 이 방법이나 getWindow 를 이용하는 방법이 나와 있는데 PowerManager 만을 이용하면 화면은 잘 꺼지는데, 화면이 켜지지 않는 문제가 발생하게 된다. 이러한 경우는 다음과 같이 PowerManager 와 함께 getWindow 방식을 이용하도록 하자.
[Activity.getWindow 메소드를 이용한 Screen On]
Screen On 을 실행할 Activity 의 onCreate()에 다음과 같이 코드를 추가해
주도록 한다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
…………………………………… 구현부
}
이렇게 PowerManager 와 WindowManager의 Flag 값을 이용하면 Screen On / Off 를 할 수 있게 된다. 다만, 주의해야 할 점은 PowerManager 의 releaseWakeLock() 메소드를 이용하고 싶다면, wakeLock() 메소드를 getWindow() 와 같이 호출 해 주어야 한다는 점이다. 그 이유는 해당 wakeLock() 메소드 내부에서 newWakeLock() 메소드를 이용하여 PowerManager 객체를 생성해주기 때문이다. 이 점을 이해한다면, 아무런 문제 없이 Screen On / Off 를 구현할 수 있으며 손쉽게 알람 개발에도 적용할 수 있을 것이다.
[출처] http://blog.naver.com/s145?Redirect=Log&logNo=140153041039
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] android - proguard (0) | 2013.05.21 |
---|---|
[안드로이드] 외부Activity ,Service 호출 (0) | 2013.05.20 |
[안드로이드] 안드로이드에서 특정 하드웨어 유무에 상관없이 배포 가능하도록 AndroidManifest.xml 파일 구성하기 (0) | 2013.05.06 |
[안드로이드] AIDL을 위한 byte[], byteArray의 Parcelable 클래스 구현 (0) | 2013.05.06 |
[안드로이드] Android USB Accessory (0) | 2013.05.06 |