Android 기기가 프로그래밍 방식으로 잠자 지 않게하려면 어떻게해야합니까?


155

Android 기기가 프로그래밍 방식으로 잠자 지 않게하려면 어떻게해야합니까?

답변:


133

한 가지 옵션은 웨이크 잠금 을 사용하는 것 입니다. 문서의 예 :

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

// screen and CPU will stay awake during this section

wl.release();

의 테이블도있다 이 페이지 wakelocks의 다른 종류를 설명합니다.

깨우기 잠금을 사용할 때는 약간의주의가 필요합니다. release()잠금을 완료 한 경우 (또는 포 그라운드가 아닌 경우) 항상 잠금 상태 를 유지 하십시오. 그렇지 않으면 앱에서 배터리가 많이 소모되고 CPU 사용량이 발생할 수 있습니다.

이 설명서에는 장치를 깨우는 방법에 대한 다양한 접근 방법과 사용 방법을 설명 하는 유용한 페이지 도 포함되어 있습니다 . "장치가 절전 모드로 전환되지 않도록 방지"가 화면 만 참조 하고 CPU를 활성 상태로 유지하지 않으면 깨우기 잠금이 필요한 것 이상일 수 있습니다.

이 방법을 사용하려면 매니페스트에 WAKE_LOCK 권한이 설정되어 있어야합니다 .


21
이 방법은 더 이상 사용되지 않으므로 더 이상 사용하지 마십시오. 다른 답변 중 하나를 살펴보십시오.
DuKes0mE

4
기기가 특정 앱 전용이며 최소화 된 상태에서도 실행해야하는 경우와 같이 웨이크 락을 사용해야하는 몇 가지 이유가 있습니다.
Muz

2
PowerManager.PARTIAL_WAKE_LOCK은 더 이상 사용되지 않으며 가장 효율적인 방법이라고 생각합니다. 사용자가 전원 버튼을 누를 수는 있지만 사용자가 release ()를 호출 할 때까지 CPU는 계속 켜져 있습니다.
Mansour Fahad

공식 문서에 따르면 "장치가 절전 모드로 전환되기 전에 일부 작업을 완료하기 위해 CPU를 계속 실행해야하는 경우 깨우기 잠금이라는 PowerManager 시스템 서비스 기능을 사용할 수 있습니다."
Joaquin Iurchuk

이것은 좋은 방법이지만 더 이상 사용되지 않습니다. 이 답변을 확인하십시오 : stackoverflow.com/a/22447615/5327912
Parth Anjaria

240

당신은 단지 특정의 절전 모드를 방지하려면 View, 단지 전화 setKeepScreenOn(true)것이에 View설정된 나 keepScreenOn에 속성을 true. 이렇게하면가 화면 View에있는 동안 화면이 꺼지지 않습니다 . 이에 대한 특별한 권한이 필요하지 않습니다.


18
또한 이로 인해 전화기가 응용 프로그램 수명 밖에서 깨어있는 상태로 유지되지는 않습니다. WakeLock과 관련된 문제가 발생할 수 있습니다.
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

2
예, 대부분의 경우이 방법이 더 좋습니다.
Edward Falk

8
선택한 답변이어야합니다. 간단하고 깨끗하며 Android가 의도 한대로. 감사합니다.
Lior Iluz

2
"android : keepScreenOn ="true "를 사용하는 것은 FLAG_KEEP_SCREEN_ON을 사용하는 것과 같습니다. 앱에 가장 적합한 방법을 사용할 수 있습니다. 활동에서 프로그래밍 방식으로 플래그를 설정하면 나중에 프로그래밍 방식으로 플래그를 지우는 옵션이 제공됩니다. 따라서 화면이 "해제 할 수 있도록 - developer.android.com/training/scheduling/wakelock.html
ANTONINO

(가) 주 setKeepScreenOn(true)경우에만 적용됩니다 View볼 수 있습니다.
Jeff T.

121

다른 작동 솔루션을 찾았습니다 : onCreate 이벤트 아래 앱에 다음 줄을 추가하십시오.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

샘플 Cordova 프로젝트는 다음과 같습니다.

package com.apps.demo;
import android.os.Bundle;
import android.view.WindowManager;
import org.apache.cordova.*;

public class ScanManActivity extends DroidGap {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        super.loadUrl("http://stackoverflow.com");
    }
}

그 후에 내 앱이 열려있는 동안 잠자기 상태가되지 않았습니다. ans가 xSus에 간다.


이것은 내 생각에 가장 좋은 옵션이었다 ... +1
Amit

이것은 Witek 답변과 동일합니다. 유일한 차이점은 이것을 ".xml"파일 대신 ".java"파일에 넣는 것입니다. ;-)
tiktak

허가는 어떻습니까? 허가가 필요한가요?
Mehdi Khademloo

@Mehdi Khademloo 그것은 허가가 필요하지 않습니다.
Wessam El Mahdy


17

아래와 같이 활동 창에 플래그 설정

@Override public void onResume() {
 super.onResume();
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override public void onPause() {
 super.onPause();
 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

6

루트 쉘 (예 : adb 쉘)에서 다음을 사용하여 잠글 수 있습니다.

echo mylockname >/sys/power/wake_lock    

그 후에는 장치가 깨어있을 때까지 다음을 수행합니다.

echo mylockname >/sys/power/wake_unlock    

'mylockname'과 동일한 문자열입니다.

이렇게해도 화면이 어두워지는 것은 아니지만 CPU가 잠자기 상태가되지는 않습니다.

/ sys / power / wake_lock은 사용자 라디오 (1001)와 그룹 시스템 (1000) 그리고 물론 루트에 대한 읽기-쓰기입니다.

참조는 여기에 있습니다 : http://lwn.net/Articles/479841/


3

@eldarera가 말한 것은 모든면에서 정확합니다. 깨우기 잠금은 장치가 잠자기 상태를 유지하는 올바른 방법입니다.

나는 당신이 응용 프로그램이 필요로하는 것을 모르지만 , 휴대 전화가 당신이 필요로하는 것을 더 많이 깨우지 않도록 강요하지 않으면 배터리 수명이 엄청나게 고통받지 않도록 응용 프로그램을 어떻게 설계 해야하는지 생각 하는 것이 정말로 중요 합니다.

이벤트를 시작하고 전화 및 (앱)을 깨워서 수행해야 할 작업을 수행 한 다음 다시 절전 모드로 전환 하는 방법에 대한 이 좋은 예 를 알려 AlarmManager드리겠습니다. Alarm Manager (source : commonsware.com)


구체적이고 의도적으로 배터리를 방전시키기위한 유틸리티 앱이 있습니다. 한 번만 필요했습니다. 기본적으로 웨이크 락을 얻고, 미친 듯이 진동하고, 손전등을 켜고, 밝기를 높이는 등의 작업을 수행합니다. 따라서이를 사용하는 앱이 있습니다. 그러나 이것은 주제에서 벗어
났기

0

Xamarin 사용자 인 경우 솔루션입니다.

   protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle); //always call superclass first

        this.Window.AddFlags(WindowManagerFlags.KeepScreenOn);

        LoadApplication(new App());
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.