android - 前台服务中的 Android webRTC 调用
问题描述
我正在创建一个具有音频通话功能的 Android 应用程序(Java 代码)。我设法使用 webRTC 框架使其工作。我想让我的音频通话表现得像 WhatsApp 和 Messenger,即使用户从应用历史记录中停止应用或开始使用其他应用,这些应用也会保持音频通话运行。
因此,我决定将 webRTC 代码从 Activity 迁移到 Foreground Service。我的音频通话 Activity 处理 UI,显示朋友照片、姓名、通话计时器……所以我必须通过绑定和发送 android.os.Message 对象在我的 Activity 和我的前台服务之间进行通信。
使用 SAMSUNG 设备时一切正常,如果我终止应用程序,我可以通过单击前台服务的通知返回呼叫活动,并且音频呼叫会一直工作直到我挂断。
当我使用小米设备(redmi note7)时出现了我的问题,如果我杀死该应用程序,音频通话停止,导致我的前台服务重新启动。即使从设置中启用“自动启动”。
我在这里搜索了一个解决方案,但我找到的所有答案都不能满足我的需要,因为我不能只接受我的服务被重新启动。如果我想恢复语音通话,我必须重新给朋友打电话!
那么问题来了:如何防止小米、华为、OPPO……设备重启前台服务?
WhatsAPP、Messenger、Instagram 等就是这种情况。
解决方案
这是一个棘手的问题,因为它确实取决于供应商。有一个网站根据供应商处理服务和流程的“糟糕程度”记录和排名。从网站:
...在 Android 6 (Marshmallow) 中,谷歌在基本 Android 中引入了打盹模式,试图统一各种 Android 手机的电池节省。不幸的是,供应商(例如小米、华为、OnePlus 甚至三星..)似乎没有抓住那个球,他们都有自己的电池保护程序,通常写得非常糟糕,只在表面上节省电池并产生副作用。
解决方案因供应商而异,也因 ROM 版本而异。例如,对于华为,您可以通过手机设置 > 电池 > 应用启动来解决华为 P20、华为 P20 Lite、华为 Mate 10 中的问题,然后将您的应用设置为“手动管理”并确保一切都已打开。此外,对于可靠的后台进程,您可能需要卸载 PowerGenie(这是华为的电源管理应用程序)。另一方面,对于 EMUI 9+ 设备,您必须通过adb卸载 PowerGenie
推荐阅读
- flutter - 方法“[]”在 null 上调用,但在 App 中有效
- angular-cli - ng 使用 Angular 服务时出现“地址不可用”错误
- python - TypeError:无法腌制弱引用对象
- python-3.x - python中的main.py到底是什么,我如何使用它来使用pyinstaller创建一个可执行文件?
- c# - 为什么要使用 ReaderWriterLockSlim.EnterReadLock?
- ruby-on-rails - 使用现有的推文模型实现转推功能
- c++ - 函数 C++ 中的 Auto 变量出错
- python-3.x - 如果失败,如何退出python子进程
- android-security - Android 中的 Playstore 通知 HostnameVerifier 接口的不安全实现
- python - 在python中解析日期到日期时间格式