1

Я пытаюсь сделать экран всегда включенным, пока мое тестовое приложение находится на переднем плане с запущенным запуском Notification. Он отлично работает, когда приложение находится в состоянии возобновления, но оно не работает, когда я нажимаю кнопку «домашний/средний», чтобы включить приложение в состояние паузы, показывая текущее уведомление в строке состояния уведомления.Почему FLAG_KEEP_SCREEN_ON работает неправильно?

Почему getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) не работает на переднем плане/в режиме паузы?

MainActivity:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

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

    setContentView(R.layout.main); 

    ... 

    NotificationCompat.Builder OnGoingStatusBar = new NotificationCompat.Builder(this); 
    OnGoingStatusBar.setSmallIcon(R.drawable.image); 
    OnGoingStatusBar.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));    
    OnGoingStatusBar.setTicker(Test);   
    OnGoingStatusBar.setContentTitle("Test"); 
    OnGoingStatusBar.setContentText("Testing Message");   
    OnGoingStatusBar.setWhen(System.currentTimeMillis()); 
    OnGoingStatusBar.setAutoCancel(false); 
    OnGoingStatusBar.setContent(notificationView).build(); 
    OnGoingStatusBar.setOngoing(true); //Create OnGoing Status Bar 
    OnGoingStatusBar.setPriority(Notification.PRIORITY_MAX); 
    NotificationManager.notify(STATUSBAR_ID, OnGoingStatusBar.build()); 
} 
+0

Он работает только тогда, когда приложение имеет окно, то есть когда пользователь может видеть его пользовательский интерфейс. – StoneBird

+0

'getWindow()'. У вас есть окно только тогда, когда видно – njzk2

+0

спасибо за ответ. Есть ли способ обхода, который я могу достичь своей цели? Я знаю, что это работает на более старой версии Android: \t pm = (PowerManager) getSystemService (Context.POWER_SERVICE); \t km = (KeyguardManager) getSystemService (Context.KEYGUARD_SERVICE); \t mKeyguardLock = km.newKeyguardLock ("INFO"); \t \t mWakeLock = pm.newWakeLock (PowerManager.FULL_WAKE_LOCK | \t \t \t \t \t \t \t PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "INFO"); \t \t mKeyguardLock.disableKeyguard(); // убрать блокировку клавиатуры \t mWakeLock.acquire(); – YRTM2014

ответ

1

Вы должны двигаться getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) ниже setContentView() и положить android:keepScreenOn="true" в корневом Вид основного макета.

Документация по этой теме может быть полезно: https://developer.android.com/training/scheduling/wakelock.html#screen

+0

Спасибо за комментарий. Я последовал твоему предложению, но никаких изменений нет. Экран все равно отключается, когда активность не отображается/переднего плана/onPause. Спасибо – YRTM2014

+0

@ YRTM2014 Вы описываете предполагаемую функциональность. См. Https://developer.android.com/training/scheduling/wakelock.html – LoungeKatt

1

Я сделал это уже в одном из моего приложения, и он прекрасно работает для меня.

Plese выполните следующие действия.

Шаг 1:

@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle);  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
} 

Шаг 2: Теперь вам нужно поставить экран установки на,

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    View view = getLayoutInflater().inflate(R.layout.layout_activity, null); 
    view.setKeepScreenOn(true); 
    setContentView(view); 
} 

Вы можете также добавить его в корень вашего макета XML ,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:keepScreenOn="true" > 

Я последовал за этими шагами и, похоже, работал отлично для меня.

+0

Вам не нужно обоим! Просто флаг окна FLAG_KEEP_SCREEN_ON' или установите свойство 'keepScreenOn' в представлении (с использованием кода или XML). –

+0

Посмотрим, разрешена ли проблема с OP. –

+0

Конечно, это решено;) Я не прошу вас изменить свой ответ, я просто добавляю информацию, размещая комментарий. Но, на мой взгляд, ответ должен дать полную и правильную информацию, предпочтительно следуя лучшим практикам, если ответ не делает этого, это для меня невысокое качество. –