java - 在特定时间切换 FLAG_KEEP_SCREEN_ON

标签 java android android-asynctask android-handler

我正在尝试以编程方式切换 FLAG_KEEP_SCREEN_ON 标志。我的 Android 平板电脑应用程序适用于特定的工作环境,其中我的应用程序的主要 Activity 将始终处于开启状态。

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

android:keepScreenOn="true"

在布局 xml 中。

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

我想我可以在我的 onResume() 中使用 Task/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);
    }
};

动态注册/取消注册:

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

关于java - 在特定时间切换 FLAG_KEEP_SCREEN_ON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40301236/

相关文章:

java - AsyncTask(异步进程)

java - 使用 AsyncTask 时出现运行时异常

java - Spring Cloud Consul依赖

java - 如何根据以纬度和经度为界的形状确定面积?

java - 使用广度优先遍历算法,我按连续顺序将项目添加到二叉树中,但它们没有正确添加

按钮旁边的 Android 小计数器

java - 将数值添加到字符串名称的最简单方法

Java-又叫什么: <String> <>

java - 我的手机不振动

android - AsyncTask 和 Firebase