问题标签 [android-powermanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
918 浏览

android - 在android中按下电源按钮时播放声音

我正在开发一个应用程序,其中 “当我的应用程序正在运行并且用户按下电源按钮时”来锁定手机,然后在锁定之前它应该播放声音。

我已经在以下链接上搜索了如何在 SO 上执行此操作,但没有得到任何有效的解决方案: Want to Access Power Button events in android

在 Android 中禁用屏幕锁定(电源)按钮

像主页按钮一样覆盖电源按钮

如何连接到 Android 中的电源按钮?

我不想长按电源按钮。我只想在应用程序/活动正在运行并且用户按下电源按钮锁定手机时播放我自己的音乐。

这是我到目前为止所做的代码:

AndroidManifest.xml

MainActivity.java

我上面提到的一些帖子声称可以使用这个,但我没有得到想要的输出。我哪里错了? 我的手机刚刚被锁定而没有播放声音。建议我如何继续解决这个问题?

0 投票
1 回答
352 浏览

android - 如何打开屏幕并打开 youtube 应用程序并保持屏幕打开?

我有一个活动应该在某个时间唤醒屏幕并打开 YouTube 应用程序,我可以打开屏幕,但是如果我在 YouTube 应用程序上添加一个 startActivity 它不会打开(YouTube 应用程序启动但屏幕保持关闭)。

如果我只是运行代码来打开屏幕 - 确实如此,如果我只是运行代码来启动 YouTube 应用程序 - 它确实如此,如果我同时设置两者,屏幕不会打开,但 YouTube 应用程序会启动。我猜是因为一旦 YouTube 应用程序启动,保持屏幕开启的活动就会被破坏/暂停 - 在这种情况下屏幕会关闭(即使我看不到它打开)。

我对问题所在是正确的吗?如果是这样,怎么办?

0 投票
0 回答
481 浏览

android - Qt Android服务:屏幕关闭+USB线未连接时如何保持服务运行?

为什么在屏幕关闭+USB未连接时服务不能一直在后台工作?

使用 Qt,我创建了一个测试 android 服务,该服务使用 QTimer 每 5 秒发出推送通知。我这样做是为了监视服务是否将始终在后台运行。

但是,关闭屏幕后,我收到通知大约 30 秒(总共:5 或 6 个),然后在 2-3 分钟内我什么也没收到。然后我收到一个通知。然后我又一无所获。

我尝试了以下所有方法但没有解决方案:

*使用电源管理器:

显现:

顺便说一句,该服务没有被杀死,因为一旦我打开 Back-On 屏幕,它就会恢复。

为什么在屏幕关闭+USB未连接时服务不能一直在后台工作?

0 投票
1 回答
473 浏览

android - 是因为android中的Doze模式,我永远无法使用AlarmManager创建一个准确的闹钟应用程序吗?

我正在使用 AlarmManager,试图为 android 创建一个警报应用程序。我注意到手机休眠时 setRepeating 不起作用。所以,我尝试了 setExactAndAllowWhileIdle。

但是,我读到了这个:

与其他警报不同,系统可以自由地重新安排此类警报,使其与任何其他警报(即使来自同一个应用程序的警报)一起发生故障。这显然会在设备空闲时发生(因为此警报可能会在空闲时响起,此时来自应用程序的任何其他警报将一直保持到稍后),但即使在非空闲时也可能发生。请注意,操作系统将允许自己比常规精确警报更灵活地安排这些警报,因为应用程序已选择此行为。当设备空闲时,为了优化电池寿命,它可能需要更多的调度自由。

我需要准确的时间,比如闹钟。用户将其设置为早上 6:00,然后在 6:01 或 6:02 响铃会很奇怪!因为电话空闲而根本不响铃是灾难性的!

我现在能做什么?

0 投票
1 回答
658 浏览

android - 在整个 Android 系统中使用 FLAG_KEEP_SCREEN_ON

我的应用程序的目标是在整个Android系统中保持屏幕开启。以前,我为此使用了 FULL_WAKE_LOCK,它允许我阻止整个系统的屏幕变暗。然而,从 API Level 17 开始,它就被弃用了:

此常量在 API 级别 17 中已弃用。大多数应用程序应使用 FLAG_KEEP_SCREEN_ON 而不是这种类型的唤醒锁,因为当用户在应用程序之间移动时它将由平台正确管理并且不需要特殊权限。

官方文档建议使用FLAG_KEEP_SCREEN_ON,但也可以仅将其用于特定的Activity.

我仍然会FULL_WAKE_LOCK,但是我发现它现在在某些设备上不起作用,例如 MediaPad Huawei x2、Redmi Note 3 等。我目前使用的PowerManager方式可以在 GitHub 上找到。之后有没有更好的方法来完成这项任务API level 17

0 投票
2 回答
2462 浏览

android - 如何在我在 Lineage OS 上运行的应用程序中使用 PowerManager.goToSleep()?

CyanogenMod/Lineage OS 具有通过双击状态栏来转动屏幕的功能。它只是关闭屏幕,而不是锁定设备。据我所知,这对于普通应用程序是不可能的。应用商店中的应用程序通过锁定设备来关闭设备。我浏览了 Lineage OS 的源代码,如果我理解正确的话,它似乎使用PowerManager.goToSleep().

我想创建一个应用程序来关闭屏幕,供我个人在运行 Lineage OS 的设备上使用。因为它是 Lineage OS,而不是普通的 ROM,所以我可以做更多的事情,比如获得 root 访问权限或刷机。

但是根据这个问题,第三方应用程序无法访问该方法。我创建了一个简单的项目并调用了该方法,但是当我尝试构建项目时,发生了“错误:找不到符号方法 goToSleep(int)”。

我可以使用 Android Studio 和官方 SDK 创建一个调用该方法的应用程序吗?如果没有,我该如何构建调用该方法的应用程序?

根据要求添加了代码:

显现:

在阅读了“ApriOri”告诉的问题后,我知道我必须使用平台的证书签署应用程序,我可能可以这样做,因为 Lineage OS 是开源的。但首先,我需要构建它。

0 投票
1 回答
537 浏览

android - 如何检测用户从电池优化的“未优化”列表中删除了我的应用程序?

我有一个需要忽略打盹模式的应用程序,它要求用户以通常的方式将其添加到未优化的应用程序列表中:

onActivityResult()我检查他是否真的将其添加到“未优化”列表中。到目前为止一切顺利。我的应用程序启动它的服务,该服务获取并持有 WAKE_LOCK 并永久工作(是的,我知道这会耗尽电池,但我的用例需要它)。

我的问题是,稍后用户可能会决定从“未优化”列表中删除该应用程序。

我的问题:

  1. 是否有我可以注册的广播以获得电池优化设置更改的通知?

  2. 如果没有,是否有另一种方法来检测我的应用程序的电池优化设置已更改,而不是定期检查其状态isIgnoringBatteryOptimizations()

最初我认为在这种情况下应用程序将被停止(当权限被删除时)但事实并非如此。

0 投票
1 回答
505 浏览

android - 重启后阻止 USB_DEVICE_ATTACHED 启动应用程序

我有一个监听 USB_DEVICE_ATTACHED 广播意图的活动,它在用户插入我的 USB 设备并选择我们的应用程序时启动。我的问题是 android 主机设备每天重启一次(通常是凌晨 4 点左右),此时附加的 USB_DEVICE_ATTACHED 意图也会自行触发。

在这种情况下,我绝对不想启动我的活动,因为它不知道如何关闭自己。我怎样才能防止这种情况发生?我尝试使用 PowerManager.isScreenOn() 布尔值来不启动我的活动(目标是 API 17),但它认为屏幕确实打开了。

0 投票
1 回答
789 浏览

android - 如果我不取消注册接收器怎么办

如果我不取消注册接收器会怎样?它会减慢我的应用程序或导致应用程序崩溃或引发某种异常吗?即使应用程序已关闭,我也需要始终重新注册此接收器:

0 投票
1 回答
620 浏览

android - Activity被AlarmManager启动时PowerManager不触发

我是一名艺术家,我正在使用几部 Android 智能手机进行安装。我不是 Java/Android 编程方面的专家。我只是边做边学,stackoverflow 非常有帮助。我正在使用具有不同 Android 版本(2.3-4.4)的不同设备。这些设备通过 USB 持续供电。该应用程序应仅在展览的开放时间内运行,并在第二天自动度假。对于调度,我使用的是 AlarmManager。目前我在某些设备上的自动重启有问题,在其他设备上它按预期工作。

以下是调度中的一些重要片段:

在 AndroidManifest.xml 中,我设置了以下权限:

其中设置了 WAKE_LOCK 权限。

onCreate 开始于:

使用了 PowerManager.ACQUIRE_CAUSES_WAKEUP,据我了解,无论屏幕处于何种状态,它都应该打开屏幕。

在 onDestroy 我正在使用:

由于“已达到展览结束时间”而调用 finish() 时会执行此代码段。如前所述,这适用于大多数设备。在那些应用程序似乎不会自动重新启动的设备上,应用程序会在屏幕打开后立即启动,例如通过按下电源按钮或断开 USB 连接(例如用于连接笔记本电脑以读取 logcat。)在 logcat I找到类似的东西(LG P-875 Android 4.1.3 应该从 14:00:xx 开始)

对我来说,这看起来不错,但是 PowerManager 没有反应。在本例中,几分钟后我断开 USB 连接以连接笔记本电脑时,PowerManager 做出了反应:

在第二行但也是最后一行中,我在 onCreate 中发送的请求似乎已被处理(tag=MyWakeLock)

在编写过程中,我刚刚意识到 PowerManager 确实在下一次测试中自动做出反应,但仅延迟了大约 10 分钟的 AlarmManager 动作。

我究竟做错了什么?我必须在 onDestroy 中释放 WakeLock 吗?有解决问题的方法吗?