前台服务中的 Android webRTC 调用

标签 android service webrtc foreground-service webrtc-android

我正在创建一个具有音频通话功能的 Android 应用程序(Java 代码)。 我设法使用 webRTC 框架使其工作。 我想让我的音频通话像 WhatsApp 和 Messenger 一样,即使用户从应用历史记录中停止该应用或开始使用其他应用,这些应用仍会保持音频通话运行。

因此,我决定将 webRTC 代码从 Activity 迁移到前台服务。 我的音频通话 Activity 处理 UI,显示 friend 照片、姓名、通话计时器...... 所以我必须通过绑定(bind)和发送 android.os.Message 对象在我的 Activity 和我的前台服务之间进行通信。

使用 SAMSUNG 设备时一切正常,如果我关闭应用程序,我可以通过单击前台服务的通知返回到通话 Activity ,并且音频通话一直有效,直到我挂断。

当我使用小米设备 (redmi note7) 时,我的问题出现了,如果我终止应用程序,音频调用停止,导致我的前台服务重新启动。 即使在设置中启用“自动启动”之后。

我在这里搜索了一个解决方案,但我找到的所有答案都不能满足我的需要,因为我不能接受我的服务被重新启动。 如果我想恢复语音通话,我必须重新给 friend 打电话!

所以,问题是: 如何防止小米、华为、Oppo...设备重启前台服务?

WhatsAPP、Messenger、Instagram 等就是这种情况。

最佳答案

这是一个棘手的问题,因为它实际上取决于供应商。有一个网站根据供应商处理服务和流程的“有多糟糕”来记录供应商并对其进行排名。来自site :

...With Android 6 (Marshmallow), Google has introduced Doze mode to the base Android, in an attempt to unify battery saving across the various Android phones. Unfortunately, vendors (e.g. Xiaomi, Huawei, OnePlus or even Samsung..) did not seem to catch that ball and they all have their own battery savers, usually very poorly written, saving battery only superficially with side effects.

解决方案因供应商和 ROM 版本而异。 例如,对于华为,您可以通过手机设置>电池>应用启动解决华为 P20、华为 P20 Lite、华为 Mate 10 中的问题,然后将您的应用设置为“手动管理”并确保一切正常打开。此外,对于可靠的后台进程,您可能需要卸载 PowerGenie(这是华为的电源管理应用程序)。另一方面,对于 EMUI 9+ 设备,您必须通过 adb

卸载 PowerGenie

关于前台服务中的 Android webRTC 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58605625/

相关文章:

java - 从接收者通知线程

android - 如何检查 SpeechRecognizer 当前是否正在运行?

ruby - 将 Ruby/EventMachine 脚本作为系统服务运行

javascript - 无法使用 Electron 运行屏幕共享 chrome 应用程序

android - 如何在 pre-2.2 Android 中禁用布局优化?

Android如何将@符号添加为文本

插入后Android SQLite查询不返回数据

android - IntentService 未被调用

javascript - 降低 WebRTC 超时

node.js - 使用 wss 验证 kurento 媒体服务器