当我的活动正在运行且设备已连接到充电器时,防止android中的设备锁定

当我的活动正在运行且设备已连接到充电器时,防止android中的设备锁定,android,security,locking,Android,Security,Locking,我有一个夜间时钟应用程序,我想在应用程序运行且设备在充电器上时禁用该设备的键盘防护。这个想法是,如果你使用的是充电器,并且这个应用程序正在运行,那么可以合理地假设你在一个安全的位置。当退出应用程序时(通过back或home),我不希望出现解锁屏幕,只要允许正常使用,就好像手机的空闲时间从未超过设备的锁定时间一样 目前,我的应用程序使用标志“锁定窗口时显示”选项,它可以很好地保持屏幕打开和解锁,但当我点击“返回”或“主页”(锁定时间到期后),我会使用解锁键盘屏幕解锁设备。我想防止在我的应用程序正在

我有一个夜间时钟应用程序,我想在应用程序运行且设备在充电器上时禁用该设备的键盘防护。这个想法是,如果你使用的是充电器,并且这个应用程序正在运行,那么可以合理地假设你在一个安全的位置。当退出应用程序时(通过back或home),我不希望出现解锁屏幕,只要允许正常使用,就好像手机的空闲时间从未超过设备的锁定时间一样

目前,我的应用程序使用标志“锁定窗口时显示”选项,它可以很好地保持屏幕打开和解锁,但当我点击“返回”或“主页”(锁定时间到期后),我会使用解锁键盘屏幕解锁设备。我想防止在我的应用程序正在运行且设备在充电器上时锁定其他应用程序。我显然会让这个功能成为用户选择的设置,但是如何实现呢

有人能帮我解决这个问题吗?我所有的谷歌搜索努力都指向只阻止我的应用程序被锁定,但我已经解决了这个问题


谢谢。

首先创建一个意向过滤器并侦听充电器事件

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
在听众中

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

if(isCharging) {
//disable keyguard
}
在你的onPause()中


启用键盘防护

非系统应用程序无法禁用键盘防护。你能做的最好的事情就是把你的应用程序变成一个设备,并增加锁定时间。然而,对于时钟应用程序来说,这可能是可疑的。此外,一旦用户退出你的应用程序,你通常无法控制其他应用程序或系统的运行情况,这就是Android的工作方式。我明白为什么在按下home键后设备突然被锁定会感觉不自然,但我认为您对此无能为力。

我实际上对电池的状态不感兴趣,但对设备是连接到交流电源还是USB电源感兴趣。我不确定上面的内容对我有什么帮助,因为它只表明电池是否充电。我应该在活动中使用它吗?还是我必须有一个单独的接收器?此外,我不知道如何禁用键盘保护。KeyguardManager没有任何我能理解的方法来禁用它。我只是不明白这个答案——很抱歉这么厚;)我用来测试的手机是HTC Desire HD,它带有一个时钟应用程序,当你在时钟视图中并连接到AC/USB电源时,它会停止锁定。所以我猜,因为这是HTC的一部分,它可能获得了权威——它实际上得到了几乎所有可能的东西。是否有只能够禁用钥匙锁的特定权限?您可以检查他们的应用程序是否安装在
/system/app
中。如果是这样,它几乎可以得到任何许可。不知道是否有特定权限,但我非常确定它需要系统用户或捆绑应用程序(
signatureOrSystem
permission level)。