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

Posted

技术标签:

【中文标题】当我的活动正在运行并且设备已连接到充电器时,防止设备锁定 android【英文标题】:Prevent device lock in android while my activity is running AND device is connected to charger 【发布时间】:2012-10-01 14:08:13 【问题描述】:

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

目前我的应用程序使用 FLAG_SHOW_WHEN_LOCKED 窗口选项,它很好地保持屏幕开启和解锁,但是当我回击或回家时(锁定时间到期后)我得到解锁键盘屏幕来解锁设备。我想防止在我的应用程序正在运行并且设备在充电器上时发生这种锁定其他应用程序的情况。我显然会让这个功能成为用户选择的设置,但是如何实现呢?

任何人都可以帮助我解决这个问题 - 我所有的谷歌搜索工作都指向只让我的应用程序不被锁定,但我已经解决了这个问题。

谢谢。

【问题讨论】:

【参考方案1】:

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

【讨论】:

我用于测试的手机是 HTC Desire HD,它带有一个时钟应用程序,当您处于时钟视图并连接到 AC/USB 电源时,它会停止锁定。所以我猜是因为它包含在 HTC 中,所以它可能获得了授权——它实际上拥有了几乎所有可能的东西。是否有特定权限才能禁用键锁? 您可以检查他们的应用程序是否安装在/system/app。如果是这样,它几乎可以获得任何许可。不知道是否有特定权限,但我很确定它需要系统用户或捆绑的应用程序(signatureOrSystem 权限级别)。【参考方案2】:

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

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() 中

启用键盘保护

【讨论】:

我实际上并不关心电池的状态,而是设备连接到交流电源还是 USB 电源。我不确定以上内容对我有什么帮助,因为它仅指示电池是否已充电。我应该在活动中使用它还是必须有一个单独的接收器? 另外我看不到如何禁用键盘保护。 KeyguardManager 没有任何我能理解的方法来禁用它。我只是不明白这个答案 - 很抱歉这么厚;)

以上是关于当我的活动正在运行并且设备已连接到充电器时,防止设备锁定 android的主要内容,如果未能解决你的问题,请参考以下文章

验证 iphone 是不是已连接到扩展坞

使用firebase时如何检测设备连接状态? [复制]

当设备通过汽车中的 USB 端口连接到 FM 发射器时,GPS 无法工作或更新非常慢

如何截取应用截图上传应用商店? [复制]

颤振医生:错误:无法连接到lockdownd,错误代码-21

ChromeCast 发件人发现逻辑