繁体   English   中英

在特定时间切换FLAG_KEEP_SCREEN_ON

[英]Toggling FLAG_KEEP_SCREEN_ON at specific times

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

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

android:keepScreenOn="true"

在布局xml中。

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

我想我可以在每隔x分钟运行一次的onResume()中使用Task / handler.postDelayed() ,并检查当前时间是否在范围内。 我还计划取消任务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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM