Sir*_*jik 5 javascript java webrtc cordova phonegap
我写了一个用cordova/phonegap编写的音频/视频通话混合应用程序。我用了
1) 用于实际音频或视频流的 webrtc
2)服务器发送事件(SSE)来监听来电。https://apifriends.com/api-streaming/server-sent-events/
3) 简单对等https://github.com/feross/simple-peer
当应用程序打开时,一切顺利,我可以接收来电信号等并连接。问题是当应用程序关闭时。我无法打开应用程序或获得任何类型的通话状态指示。
我决定进行一些挖掘,很快发现这在 webview 中是不可能的。我尝试了一些像https://github.com/katzer/cordova-plugin-background-mode这样的插件,它们在一段时间内运行良好,但会很快耗尽电池电量,并且您的应用程序可能会在应用商店通知中被拒绝。
当我的应用程序打开时,来电将被正确捕获。我只需要打开应用程序。我阅读了有关后台推送消息(无声)的信息,但未能让这些消息打开应用程序。推送消息处理程序仅在应用程序处于前台时调用。
所以我终于爱上了这个文档,它是我最接近这个答案的。Phonegap/Cordova 应用程序中没有对后台服务的直接支持。
原因是您的混合应用程序是用 JS 编写的,而您的 JS 代码运行在具有 webview 的 Activity 中。一旦您退出您的应用程序,该应用程序就会被暂停。
如果你真的想在android中拥有后台服务,你可以用Java(原生)编写你的Android服务并从你的JS代码中调用你的服务。(本机用于您的应用程序的后台服务和 JS)
https://forum.ionicframework.com/t/how-to-run-cordova-plugin-in-android-background-service/6677/3
从上面,我认为我必须执行检测来自 java 服务的传入调用的实际逻辑,如果我检测到任何内容,我可以强制打开我的应用程序。以下是我打开应用程序后执行的简单逻辑。
if (documentLoaded && isLoggedIn)
{
//url returns json only if there is an incoming call otherwise empty
var source = new EventSource("https://www.url.com/api/sse/incomingcall.php?userid=" + userid, {
withCredentials: true
});
source.addEventListener("incomingcalls", function (event) {
var callSession = JSON.parse(event.data);
// HandleIncomingCall();
}, false);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不是 Java 编码员,以前也没有写过插件。我将如何创建一个 android 服务,它会定期侦听上面的 url,如果检测到任何 json 打开我的应用程序。