Java 在特定时间切换标志\u保持屏幕\u打开

Java 在特定时间切换标志\u保持屏幕\u打开,java,android,android-asynctask,android-handler,Java,Android,Android Asynctask,Android Handler,我试图通过编程方式切换标志\u保持屏幕\u打开。我的android平板电脑应用程序适用于特定的工作环境,我的应用程序的主要活动将始终处于开启状态 到目前为止,我们通过使用 android:keepScreenOn="true" 在布局xml中 不幸的是,员工并不总是记得在工作日结束时手动关闭屏幕。我想在工作日结束后以编程方式禁用“保持屏幕打开”功能,但在再次启动后重新启用它 我想我可以在我的onResume()中使用一个Task/handler.postDelayed(),它每x分钟运行一次,

我试图通过编程方式切换
标志\u保持屏幕\u打开。我的android平板电脑应用程序适用于特定的工作环境,我的应用程序的主要活动将始终处于开启状态

到目前为止,我们通过使用

android:keepScreenOn="true"
在布局xml中

不幸的是,员工并不总是记得在工作日结束时手动关闭屏幕。我想在工作日结束后以编程方式禁用“保持屏幕打开”功能,但在再次启动后重新启用它

我想我可以在我的
onResume()
中使用一个Task/
handler.postDelayed()
,它每x分钟运行一次,检查当前时间是否在范围内。我还计划取消任务
onPause()


我的问题:有更好的方法吗?还是这是一个好方法?如果是这样,我应该使用活套吗?

您可以使用
AlarmManager
在适当的时间设置标志,无需定期检查

例如,在
活动
中定义一个
广播接收器
,该接收器清除
标志\u保持屏幕\u打开
标志:

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);