在前台服务中实现Android WebRTC通话

3
我正在创建一个具有音频通话功能的Android应用程序(Java代码)。我使用了webRTC框架使其正常工作。我想让我的音频通话表现得像WhatsApp和Messenger一样,这些应用程序即使用户停止应用程序或开始使用其他应用程序,通话也仍在继续进行。
因此,我决定将webRTC代码从Activity迁移到前台服务。我的音频通话Activity处理UI,显示朋友的照片、姓名、通话计时器等。因此,我必须通过绑定和发送android.os.Message对象实现Activity和前台服务之间的通信。
在使用三星设备时,一切都很好,如果我杀死应用程序,我可以通过点击前台服务的通知返回到呼叫活动,并且音频通话会一直工作直到挂断电话。
但是,当我使用小米设备(红米note7)时,我的问题出现了。如果我杀死应用程序,音频通话就会停止,因为我的前台服务被重新启动。即使在设置中启用了“自动启动”。
我在这里搜索了解决方案,但我找到的所有答案都不能满足我的需求,因为我不能接受我的服务被重新启动。如果我想恢复音频通话,我必须再次呼叫朋友!
因此,问题是: 如何防止小米、华为、OPPO等设备重新启动前台服务?
这是WhatsApp、Messenger、Instagram和其他应用程序的情况。

1
请查看此链接(https://dontkillmyapp.com/),它解释了如何在每个供应商上保持您的服务活动。 - Tomer Petel
谢谢你的回答。你分享的链接提供了很棒的信息,对开发人员来说更好了解。不幸的是,我没有找到解决我的问题的方法。我开始考虑暂时放弃。那些供应商正在将WhatsApp、Messenger、Viber和其他知名应用程序列入白名单,但对于我们的应用程序来说这是不可能的。 - OussaMah
好的,知道了。作为答案发布。 - Tomer Petel
1个回答

1
这是一个棘手的问题,因为它实际上取决于供应商。有一个网站根据他们处理服务和流程的“糟糕程度”对供应商进行记录和排名。来自site的内容如下:
“...随着Android 6(Marshmallow)的推出,Google在基础Android中引入了Doze模式,试图统一各种Android手机的节电功能。不幸的是,供应商(例如小米、华为、一加甚至三星...)似乎没有注意到这个功能,他们都有自己的电池节省功能,通常写得非常糟糕,只表面上节省电池,却带来了副作用。”
解决方案因供应商而异,也因ROM版本而异。例如,对于华为,您可以通过电话设置>电池>应用程序启动克服华为P20、华为P20 Lite、华为Mate 10的问题,并将您的应用程序设置为“手动管理”,确保所有内容都已打开。此外,对于可靠的后台进程,您可能需要卸载PowerGenie(这是华为的电源管理应用程序)。另一方面,对于EMUI 9+设备,您将需要通过adb卸载PowerGenie。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接