在特定时间切换 FLAG_KEEP_SCREEN_ON
Toggling FLAG_KEEP_SCREEN_ON at specific times
我正在尝试以编程方式切换 FLAG_KEEP_SCREEN_ON
标志。我的 android 平板电脑应用专为特定工作环境而设计,我的应用程序的主 activity 将始终打开。
到目前为止,我们已经使用
android:keepScreenOn="true"
在布局中xml。
不幸的是,员工并不总是记得在工作日结束时手动关闭屏幕。我想在工作日结束后以编程方式禁用 'keep screen on' 功能,但在它再次开始时重新启用它。
我想我可以在我的 onResume()
中使用任务/handler.postDelayed()
,它每 x 分钟运行一次并检查当前时间是否在范围内。我还打算取消任务 onPause()
.
我的问题:有没有更好的办法?或者这是一个好方法?如果是这样,我应该使用活套吗?
您可以在适当的时候使用AlarmManager
设置标志,无需定期检查。
例如,在您的 Activity
中定义一个 BroadcastReceiver
,清除 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);
}
};
Register/unregister 动态:
@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);
我正在尝试以编程方式切换 FLAG_KEEP_SCREEN_ON
标志。我的 android 平板电脑应用专为特定工作环境而设计,我的应用程序的主 activity 将始终打开。
到目前为止,我们已经使用
android:keepScreenOn="true"
在布局中xml。
不幸的是,员工并不总是记得在工作日结束时手动关闭屏幕。我想在工作日结束后以编程方式禁用 'keep screen on' 功能,但在它再次开始时重新启用它。
我想我可以在我的 onResume()
中使用任务/handler.postDelayed()
,它每 x 分钟运行一次并检查当前时间是否在范围内。我还打算取消任务 onPause()
.
我的问题:有没有更好的办法?或者这是一个好方法?如果是这样,我应该使用活套吗?
您可以在适当的时候使用AlarmManager
设置标志,无需定期检查。
例如,在您的 Activity
中定义一个 BroadcastReceiver
,清除 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);
}
};
Register/unregister 动态:
@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);