首页 > 解决方案 > 前台服务中的 Android webRTC 调用

问题描述

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

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

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

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

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

那么问题来了:如何防止小米、华为、OPPO……设备重启前台服务?

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

标签: androidservicewebrtcforeground-servicewebrtc-android

解决方案


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

...在 Android 6 (Marshmallow) 中,谷歌在基本 Android 中引入了打盹模式,试图统一各种 Android 手机的电池节省。不幸的是,供应商(例如小米、华为、OnePlus 甚至三星..)似乎没有抓住那个球,他们都有自己的电池保护程序,通常写得非常糟糕,只在表面上节省电池并产生副作用。

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


推荐阅读