Yanıtlar:
Bir seçenek bir uyandırma kilidi kullanmaktır . Dokümanlardan örnek:
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();
Ayrıca bu sayfada bir tablo var farklı türdeki uyanıklıkları tanımlayan .
Uyandırma kilitleri kullanılırken dikkatli olunması gerektiğini unutmayın. Her zamanrelease() bittiğinde (ya da ön planda olmadığında) kilidin bulunduğundan . Aksi takdirde, uygulamanız ciddi pil boşalmasına ve CPU kullanımına neden olabilir.
Dokümantasyon ayrıca bir cihazı uyanık tutmaya yönelik farklı yaklaşımları ve ne zaman birini kullanmayı seçebileceğinizi açıklayan kullanışlı bir sayfa içerir . "Cihazın uyku moduna geçmesini önle" seçeneği yalnızca ekrana atıfta bulunuyorsa (ve CPU'yu aktif tutmuyorsanız), bir uyandırma kilidi muhtemelen ihtiyacınız olandan daha fazladır.
Ayrıca, bu yöntemi kullanabilmek için manifestinizde WAKE_LOCK iznine sahip olduğunuzdan emin olmanız gerekir .
Sadece belirli bir modda uyku modunu önlemek istiyorsanız , bunu Viewarayın veya özelliği olarak ayarlayın . Bu, ekrandayken ekranın kapanmasını önleyecektir . Bunun için özel bir izin gerekmez.setKeepScreenOn(true)ViewkeepScreenOntrueView
setKeepScreenOn(true)Yalnızca Viewgörünür olduğunda etkili olacağını unutmayın .
Başka bir çalışma çözümü buldum: onCreate etkinliği altında uygulamanıza aşağıdaki satırı ekleyin.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Örnek Cordova projem şöyle görünüyor:
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");
}
}
Bundan sonra, uygulamam açıkken uykuya geçmezdi. Cevap için teşekkürler xSus.
android:keepScreenOn="true" XML düzenine sahip olmak daha iyi bir seçenek olabilir.
Daha fazla bilgi: https://developer.android.com/training/scheduling/wakelock.html
Etkinlik Penceresinde bayrakları aşağıdaki gibi ayarlayın
@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);
}
Kök kabuğundan (örneğin adb kabuğu) aşağıdakilerle kilitleyebilirsiniz:
echo mylockname >/sys/power/wake_lock
Bundan sonra, cihaz siz uyanana kadar uyanık kalacaktır:
echo mylockname >/sys/power/wake_unlock
'Mylockname' için aynı dize ile.
Bunun ekranın kararmasını engellemeyeceğini, ancak CPU'nun uyumasını engelleyeceğini unutmayın.
/ Sys / power / wake_lock öğesinin kullanıcı radyosu (1001) ve grup sistemi (1000) ve elbette kök için okuma-yazma olduğunu unutmayın.
Bir referans burada: http://lwn.net/Articles/479841/
@eldarerathis'in söylediği her yönüyle doğrudur, uyandırma kilidi, cihazın uykuya geçmesini önlemenin doğru yoludur.
Uygulamanın ne yapması gerektiğini bilmiyorum ama uygulamanızı nasıl tasarladığınızı düşünmeniz gerçekten önemli , böylece telefonu ihtiyacınız olandan daha fazla uyanık kalmaya zorlamıyorsunuz, yoksa pil ömrü çok fazla acı çekiyor.
Size, olayları tetiklemek ve telefonunuzu ve (uygulamanızı) yapmanız gerekenleri gerçekleştirmek ve sonra tekrar uykuya dalmak için nasıl kullanacağınıza dair iyi bir örneğe işaret ederim AlarmManager: Alarm Manager (kaynak: commonsware.com)