ऐप चलने के दौरान एंड्रॉइड डिसेबल स्क्रीन टाइमआउट


116

क्या मेरा ऐप चलने के दौरान स्क्रीनसेवर को अक्षम करने का कोई तरीका है?

स्क्रीन की डिमिंग का मेरा मतलब है।


3
View.setKeepScreenOn()[लिंक] [1] का उपयोग करने के बारे में क्या ?. हालांकि मैंने इसे खुद कभी इस्तेमाल नहीं किया है। [१]: developer.android.com/reference/android/view/…
dorzey


जवाबों:


172

आप कुछ इस तरह का उपयोग करना चाहते हैं:

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

4
यह रनिंग गतिविधि या पूरे ऐप के लिए बनाता है?
मुहम्मद रिफैट

@ मयूर.मिप्परा हाँ मुझे लगता है कि यह मामला यहाँ है
मुहम्मद रिफैट

1
अगर मैं इस कोड को एप्लिकेशन क्लास ऑनक्रिएट () विधि में लिखता हूं तो क्या यह पूरे ऐप के लिए काम करेगा?
जयेश

यदि नहीं, तो मैं उस गतिविधि में प्रत्येक पंक्ति को जोड़ने के बजाय कम कोड डालकर संपूर्ण एप्लिकेशन स्क्रीन को कैसे रख सकता हूं।
जयेश

1
@ जयेश: आप एक बेस एक्टिविटी बना सकते हैं और इस कोड को ऑनक्रिट मेथड में लिख सकते हैं और बेस एक्टिविटी से सभी एक्टिविटी को बढ़ा सकते हैं।
मरियम

102

मैंनें इस्तेमाल किया:

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

स्क्रीन टाइमआउट और अक्षम करने के लिए

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

इसे फिर से सक्षम करने के लिए।


83

एक XML तरीका भी है जिसे Google अनुशंसा करता है:

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

Google स्लाइड की जाँच करें - स्लाइड 16।

"Wakelocks महंगा है अगर भूल गए (...) Android का उपयोग करने पर विचार करें: शुद्धता सुनिश्चित करने के लिए स्क्रीनस्क्रीन रखें"


2
उन लोगों के लिए जिनके पास लिंक किए गए पीडीएफ़ पढ़ने का समय नहीं है: "Wakelocks महँगे होने पर भुला दिए जाते हैं", "Android का उपयोग करने पर विचार करें: शुद्धता सुनिश्चित करने के लिए स्क्रीनसेनऑन"।
lenrok258

2
@ lenrok258 जवाब में ;-)
neteinstein

उपयोग करते समय PowerManager.newWakeLockऔर getWindow().addFlagsकिसी कारण से काम नहीं किया, यह किया।
बेंजामिन बासमासी


3

आपके MainActivityऔर आपके ऐप में सरल रेखा नीचे दी गई लाइट को कभी बंद न करें।

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

2

एक दृश्य में, मेरे मामले में एक सरफेस व्यू उपवर्ग, आप स्क्रीन को हमेशा ऑन कर सकते हैं। मैं चाहता था कि स्क्रीन बनी रहे जबकि यह दृश्य अभी भी सामान खींच रहा था।

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

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

1
यह वास्तव में जरूरत से ज्यादा जटिल है। बस कहीं भी कॉल सेट करेंसिंकस्क्रीनऑन (सच), और फ्रेमवर्क स्वचालित रूप से स्क्रीन को रखने का ख्याल रखेगा जब आपकी खिड़की दिखाई जा रही है।
7

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स्क्रीन को बंद करने की अनुमति देता है।
माइकल

1

इसे हल करने का यह सबसे अच्छा तरीका है

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

इस प्रश्न का उत्तर देने के लिए FLAG_FULLSCREEN की आवश्यकता क्यों है?
अब्दुल वासे

0
android:keepScreenOn="true"

इसे संभालने का सबसे अच्छा तरीका है यदि हम हर समय किसी विशेष स्क्रीन को जागृत करना चाहते हैं अन्यथा इसे सक्षम करने और इसे अक्षम करने के लिए हमें स्वयं को संभालना होगा

https://developer.android.com/training/scheduling/wakelock.html


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

5.getindow ()। 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

यह वेक लॉक प्राप्त करके किया जा सकता है।

मैंने खुद इसका परीक्षण नहीं किया, लेकिन यहां इस पर एक छोटा ट्यूटोरियल है।


10
नहीं नहीं नहीं। वेक लॉक का आसानी से दुरुपयोग किया जाता है और बहुत सावधानी से उपयोग नहीं किए जाने पर उपयोगकर्ता की बैटरी को सूखा सकता है। View#setKeepScreenOnसमकक्ष या इसके xml लेआउट विशेषता का उपयोग करें ,android:keepScreenOn="true"
adamp

5
@adamp: ओपी ने यह नहीं बताया कि उसका ऐप एक गतिविधि है या एक सेवा है। एक गतिविधि को आपके द्वारा उद्धृत तंत्र का उपयोग करना चाहिए। एक सेवा एक का उपयोग करना चाहिए WakeLock
कॉमन्सवेयर

धन्यवाद इसकी सेवा नहीं है। एक चित्र दर्शक के समान है और मैं नहीं चाहता कि स्क्रीन मंद हो।
क्लैंप

@ आदम्प: आपका उल्लेख android:keepScreenOn="true"मेरी राय में गतिविधियों के लिए एकमात्र मान्य उत्तर है। जब तक बिल्कुल आवश्यक न हो, वैकलॉक से दूर रहें।
pauluss86

सिर्फ एक्टिविटीज ही नहीं बल्कि किसी भी तरह का यूआई जो विंडो दिखाता है। संबंधित विंडो फ्लैग का उपयोग करने का स्वीकृत उत्तर भी उतना ही मान्य है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.