【问题标题】:Android webRTC call in a Foreground Service前台服务中的 Android webRTC 调用
【发布时间】:2023-10-09 16:18:01
【问题描述】:

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

因此,我决定将 webRTC 代码从 Activity 迁移到 Foreground Service。 我的音频通话活动处理 UI,显示朋友照片、姓名、通话计时器...... 所以我必须通过绑定和发送 android.os.Message 对象在我的 Activity 和我的 Foreground Service 之间进行通信。

使用 SAMSUNG 设备时一切正常,如果我终止应用程序,我可以通过单击前台服务的通知返回呼叫活动,并且音频呼叫会继续工作直到我挂断。

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

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

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

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

【问题讨论】:

  • 查看此link。它解释了如何做才能使您的服务在每个供应商上都保持活力。
  • 感谢您的回答。然后,您共享的链接提供了很好的信息,更便于开发人员了解。不幸的是,我找不到我的问题的解决方案。我开始考虑暂时放弃。这些供应商将 WhatsApp、Messenger、Viber 和其他著名应用程序列入白名单。但对于我们的应用来说,这是不可能的。
  • 很高兴知道。作为答案发布。

标签: android service webrtc foreground-service webrtc-android


【解决方案1】:

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

...在 Android 6 (Marshmallow) 中,Google 已将打盹模式引入到基本 Android 中,以尝试统一各种 Android 手机的电池节省。不幸的是,供应商(例如小米、华为、一加甚至三星..)似乎没有抓住这个机会,他们都有自己的电池保护程序,通常写得很糟糕,只是表面上节省电池并有副作用。

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

卸载 PowerGenie

【讨论】:

    最近更新 更多