Ios Cordova媒体插件没有';t执行音频播放中断

Ios Cordova媒体插件没有';t执行音频播放中断,ios,objective-c,cordova,plugins,avaudioplayer,Ios,Objective C,Cordova,Plugins,Avaudioplayer,我创建了一个iOS应用程序,在后台运行时播放音频。如果音频中断(即:电话呼叫),音频将停止且永远不会恢复 我认为这是因为cordova媒体插件没有实现AudioPlayerInTerruption 我精通Javascript,但对Objective-C几乎一无所知。有人对如何添加此功能有什么建议吗 是否有实现audioPlayerEndInterruption的不同媒体插件,或者是否有将audioPlayerEndInterruption合并到cordova插件中的简单方法?CDVSound.h

我创建了一个iOS应用程序,在后台运行时播放音频。如果音频中断(即:电话呼叫),音频将停止且永远不会恢复

我认为这是因为cordova媒体插件没有实现AudioPlayerInTerruption

我精通Javascript,但对Objective-C几乎一无所知。有人对如何添加此功能有什么建议吗


是否有实现audioPlayerEndInterruption的不同媒体插件,或者是否有将audioPlayerEndInterruption合并到cordova插件中的简单方法?

CDVSound.h -修改:添加:,媒体结束中断=5

enum CDVMediaStates {
    MEDIA_NONE = 0,
    MEDIA_STARTING = 1,
    MEDIA_RUNNING = 2,
    MEDIA_PAUSED = 3,
    MEDIA_STOPPED = 4,
    MEDIA_END_INTERRUPT = 5
};
CDVSound.m -加:

Media.js -修改:添加:Media.Media\u END\u中断=5;和“结束中断”

然后找到Media.onStatus=function(id,msgType,value){并在Media.Media_STATE:block中添加一个条件

 if(value == Media.MEDIA_END_INTERRUPT) {
     //do whatever you want
 }

接下来就是这里。我最后为此编写了一个插件,它覆盖了一些默认的cordova media plugin(v0.2.12)方法。我在这里发布了一个链接,但代码乱七八糟。我只是想得到一些有用的东西,并没有真正计划共享。但这里是(没有提供文档,抱歉):


我通过使用getCurrentPosition方法,从媒体插件本身修复了这个问题。我能够检测到流媒体是否被电话或语音邮件打断。然后停止并再次播放音频。我希望这能帮助我花了很长时间才使用媒体插件和shoutcast的人

var mediaplayer=新媒体(streamingUrl、mediaSuccess、mediaFail、mediaState);
mediaplayer.play({playadiowhenscreenislocked:true});
var-prevPos=0;
var mediaTimer=setInterval(函数(){
//获得媒体位置
mediaplayer.getCurrentPosition(
//成功回调
功能(当前位置){
如果(currentposition>prevPos){
prevPos=当前位置;
}如果(currentposition==prevPos){
停止();
play();
}否则{
console.log(“无法获取pos”);
}
},
//错误回调
职能(e){
警报+(“获取位置时出错=”+e);
}
);

}, 5000)什么版本的cordova?我现在正在使用v3.1,但我计划很快切换到v3.5。如果你想测试的话,我可以对你的3.2代码进行一些修改。你应该能够修改CDVSound.h/.m文件和media.js来处理audioPlayerEndInterruption。好的。那太好了。我实际上使用的是AppGyver类固醇PhoneGap上的一层,所以我不能直接编辑插件。但我假设如果我使用Cordova Media插件并进行更改,那么我可以通过plugman将其导入到我的项目中。希望这会覆盖默认插件?是的,不确定类固醇是如何实现的,但如果你可以添加自定义插件,那么你应该是abl我想找到一个方法。fwiw,如果代码对你不起作用,它应该非常接近…只是想给你必要的步骤;-)谢谢,我会试试这个我使用的是一个叫做类固醇的平台,它位于cordova之上。因此,我不能直接编辑媒体插件。所以我试图扩展它,但我缺乏Objective-C知识,我只是在暗中摸索。我已经尽了最大努力将您提供的代码构造成一个扩展类,但是我在尝试重新声明enum CDVMediaStates时遇到了一个编译错误。有什么想法吗?是的,我认为没有办法覆盖enum。这就是我没有提供category/ext的原因。你能复制一下enum吗ire CDVSound插件(增强版),然后在config.xml中用您的插件替换它们?好吧,Jerry Coffin有一个合格的替代方案,您可以在这个链接中尝试
// Media states
Media.MEDIA_NONE = 0;
Media.MEDIA_STARTING = 1;
Media.MEDIA_RUNNING = 2;
Media.MEDIA_PAUSED = 3;
Media.MEDIA_STOPPED = 4;
Media.MEDIA_END_INTERRUPT = 5;
Media.MEDIA_MSG = ["None", "Starting", "Running", "Paused", "Stopped", "EndInterrupt"];
 if(value == Media.MEDIA_END_INTERRUPT) {
     //do whatever you want
 }