2016-10-28 3 views
1

Я пытаюсь программно переключить флаг FLAG_KEEP_SCREEN_ON. Приложение для Android-планшета предназначено для конкретной рабочей среды, в которой основное действие моего приложения всегда будет включено.Переключение FLAG_KEEP_SCREEN_ON в определенное время

Мы получили от до сих пор с помощью

android:keepScreenOn="true" 

в макете XML.

К сожалению, сотрудники не всегда помнят, как вручную отключить экран в конце рабочего дня. Я хочу программно отключить функцию «сохранить экран» после завершения рабочего дня, но снова включите его, как только он запустится.

Я думаю, что могу использовать задачу/handler.postDelayed() в моем onResume(), которая запускается каждые x минут и проверяет, находится ли текущее время в пределах или нет. Я также планирую отменить задачу onPause().

Мой вопрос: Есть ли лучший способ? Или это хороший подход? Если это так, должен ли я использовать петлитель?

ответ

2

Вы можете просто использовать AlarmManager, чтобы установить флаг в соответствующее время, не нужно периодически проверять.

Например, определить BroadcastReceiver в вашем Activity, что очищает FLAG_KEEP_SCREEN_ON флаг:

private static final String ACTION_SCR_OFF = "yourpackagename.ACTION_SCREEN_OFF"; 

private final BroadcastReceiver screenOffReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    } 
}; 

Регистрация/незарегистрированный динамически:

@Override 
protected void onResume() { 
    super.onResume(); 
    registerReceiver(screenOffReceiver, new IntentFilter(ACTION_SCR_OFF)); 
} 

@Override 
protected void onPause() { 
    unregisterReceiver(screenOffReceiver); 
    super.onPause(); 
} 

И установить сигнал, который вызывает этот приемник на соответствующее время (16:00 каждый день в этом примере):

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY, 16); 
calendar.set(Calendar.MINUTE, 0); 
calendar.set(Calendar.SECOND, 0); 

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 

Intent intent = new Intent(ACTION_SCR_OFF); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 
    PendingIntent.FLAG_UPDATE_CURRENT); 
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
    AlarmManager.INTERVAL_DAY, pendingIntent); 
Смежные вопросы