앱이 실행되는 동안 Android 비활성화 화면 시간 초과


117

내 앱이 실행되는 동안 화면 보호기를 비활성화하는 방법이 있습니까?

화면이 어두워지는 것이 의미합니다.


3
View.setKeepScreenOn()[link] [1] 사용은 어떻 습니까? 나는 그것을 직접 사용하지 않았습니다. [1] : developer.android.com/reference/android/view/…
dorzey


답변:


173

다음과 같이 사용하고 싶습니다.

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

4
이것은 달리기 활동 또는 전체 앱을위한 것입니까?
Muhammed Refaat 2014

@ MayurR.Amipara 그래 나는이 여기에 사건을 생각
모하메드 Refaat

1
이 코드를 Application 클래스 onCreate () 메서드에 작성하면 전체 앱에서 작동합니까?
Jayesh

아니요 인 경우 각 활동에 해당 줄을 추가하는 대신 코드를 더 적게 삽입하여 전체 앱 화면을 유지하려면 어떻게해야합니까?
Jayesh

1
@Jayesh : baseActivity를 만들고이 코드를 onCreate Method에 작성하고 baseActivity에서 모든 활동을 확장 할 수 있습니다.
maryam

102

나는 다음을 사용했다 :

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

화면 시간 제한을 비활성화하고

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

다시 활성화합니다.


84

Google에서 권장하는 XML 방식도 있습니다.

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true">

Google 프레젠테이션 확인 -슬라이드 16.

"잊혀진 경우 wakelock은 비용이 많이 듭니다. (...) android : keepScreenOn을 사용하여 정확성을 보장하는 것이 좋습니다."


2
링크 된 pdf를 읽을 시간이없는 사람들을 위해 : "잊혀지면 웨이크 락은 비용이 많이 듭니다", "정확성을 보장하기 위해 android : keepScreenOn 사용을 고려하십시오".
lenrok258

2
@ lenrok258 답변에 추가됨 ;-)
neteinstein

사용하는 동안 PowerManager.newWakeLock그리고 getWindow().addFlags어떤 이유로 작동하지 않았다,이했다.
Benjamin Basmaci


3

아래 줄을 간단히 추가하면 MainActivity앱이 조명을 끄지 않습니다.

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

2

보기에서, 필자의 경우 SurfaceView 하위 클래스에서 화면을 항상 켜짐으로 설정할 수 있습니다. 이 뷰가 여전히 무언가를 그리는 동안 화면이 계속 켜져 있기를 원했습니다.

public class MyCoolSurfaceView extends SurfaceView { 
@Override
protected void onAttachedToWindow (){
    super.onAttachedToWindow();
    this.setKeepScreenOn(true);
}

@Override
protected void onDetachedFromWindow(){
    super.onDetachedFromWindow();
    this.setKeepScreenOn(false);
}

1
실제로 필요한 것보다 더 복잡합니다. 어디에서나 setKeepsScreenOn (true)을 호출하면 프레임 워크가 창이 표시 될 때 화면을 자동으로 유지합니다.
hackbod

1

onStart에 넣으십시오.

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep");
    wakeLock.acquire();

그리고 이것은 당신에게 나타납니다

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

잊지 마세요

wakeLock.release();

onStop에서


1
PARTIAL_WAKE_LOCK화면이 꺼집니다.
Michael

1

이 문제를 해결하는 가장 좋은 방법입니다.

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

이 질문에 대답하기 위해 FLAG_FULLSCREEN이 필요한 이유는 무엇입니까?
Abdul Wasae 2011


0
procedure SetSleep(aEnable:Boolean);
var
    vFlags: integer;
begin
    vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
        TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
        TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
        TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;

    if aEnable then
    begin
      CallInUIThread (   // uses FMX.Helpers.Android
      procedure
      begin
        TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
      end );
    end
    else
      CallInUIThread (
      procedure
      begin
        TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
      end );
end;

0

1.getWindow (). addFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 네이티브 Android를위한 최상의 솔루션입니다.
2. React android 애플리케이션으로하고 싶다면 아래 코드를 사용하세요.

@ReactMethod
    public void activate() {
        final Activity activity = getCurrentActivity();
        if (activity != null) {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                }
            });
        }

    }

-1

이것은 Wake Lock을 획득하여 수행 할 수 있습니다.

직접 테스트하지는 않았지만 여기 에 대한 작은 자습서가 있습니다.


10
아니, 아니. 웨이크 잠금 장치는 쉽게 잘못 사용되며주의 깊게 사용하지 않으면 사용자의 배터리를 소모시킬 수 있습니다. 사용 View#setKeepScreenOn또는 이에 상응하는 xml 레이아웃 속성android:keepScreenOn="true"
adamp

5
@adamp : OP는 그의 앱이 활동인지 서비스인지를 나타내지 않았습니다. 활동은 당신이 인용 한 메커니즘을 사용해야합니다. 서비스는 WakeLock.
CommonsWare 2010

서비스가 아닙니다. 사진 뷰어와 비슷하며 화면이 어두워지는 것을 원하지 않습니다.
클램프

@adamp : 당신의 언급은 android:keepScreenOn="true"제 생각에 활동에 대한 유일한 유효한 대답입니다. 절대적으로 필요한 경우가 아니면 wakelock을 피하십시오.
pauluss86

활동뿐만 아니라 창을 표시하는 모든 종류의 UI. 해당 창 플래그 사용에 대한 허용 된 대답은 똑같이 유효합니다.
adamp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.