[英]Cordova Media Plugin doesn't implement audioPlayerEndInterruption
我創建了一個 iOS 應用程序,該應用程序在后台運行時播放音頻。 如果音頻被中斷(即:電話),音頻將停止並且永遠不會恢復。
我認為這是因為cordova媒體插件沒有實現audioPlayerEndInterruption
我擅長 Javascript,但對 Objective-C 幾乎一無所知。 有人對如何添加此功能有建議嗎?
是否有實現 audioPlayerEndInterruption 的不同媒體插件,或者是否有一種簡單的方法將 audioPlayerEndInterruption 合並到cordova 插件中?
CDVSound.h -modify:add: , MEDIA_END_INTERRUPT = 5
enum CDVMediaStates {
MEDIA_NONE = 0,
MEDIA_STARTING = 1,
MEDIA_RUNNING = 2,
MEDIA_PAUSED = 3,
MEDIA_STOPPED = 4,
MEDIA_END_INTERRUPT = 5
};
CDVSound.m -添加:
- (void)audioPlayerEndInterruption:(AVAudioPlayer*)player successfully:(BOOL)flag
{
CDVAudioPlayer* aPlayer = (CDVAudioPlayer*)player;
NSString* mediaId = aPlayer.mediaId;
CDVAudioFile* audioFile = [[self soundCache] objectForKey:mediaId];
NSString* jsString = nil;
if (audioFile != nil) {
NSLog(@"Ended Interruption of playing audio sample '%@'", audioFile.resourcePath);
}
if (flag) {
jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%d);", @"cordova.require('org.apache.cordova.media.Media').onStatus", mediaId, MEDIA_STATE, MEDIA_END_INTERRUPT];
} else {
jsString = [NSString stringWithFormat:@"%@(\"%@\",%d,%@);", @"cordova.require('org.apache.cordova.media.Media').onStatus", mediaId, MEDIA_ERROR, [self createMediaErrorWithCode:MEDIA_ERR_DECODE message:nil]];
}
[self.commandDelegate evalJs:jsString];
}
Media.js -modify:add: Media.MEDIA_END_INTERRUPT = 5; AND , "結束中斷"
// 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"];
然后找到 Media.onStatus = function(id, msgType, value) { 並在 case Media.MEDIA_STATE : block ...
if(value == Media.MEDIA_END_INTERRUPT) {
//do whatever you want
}
只關注這里。 我最終為此編寫了一個插件,該插件覆蓋了一些默認的cordova 媒體插件(v0.2.12)方法。 我在這里發布了一個鏈接,但是代碼一團糟。 我只是想得到一些有用的東西,而不是真的打算分享。 但在這里(沒有提供文件,抱歉):
https://github.com/stevethorson/Interruptible-Cordova-Media.git
我從媒體插件本身解決了這個問題,使用 getCurrentPosition 方法我能夠檢測到流媒體是否被電話或語音郵件中斷......然后再次停止並重新播放音頻。 我希望這可以幫助我永遠帶我使用媒體插件和shoutcast 的人。
var mediaplayer = new Media(streamingUrl, mediaSuccess, mediaFail, mediaState); mediaplayer.play({playAudioWhenScreenIsLocked :true}); var prevPos = 0; var mediaTimer = setInterval(function () { // get media position mediaplayer.getCurrentPosition( // success callback function (currentposition) { if (currentposition > prevPos) { prevPos = currentposition; } else if (currentposition === prevPos) { stop(); play(); } else { console.log("can't get pos"); } }, // error callback function (e) { alert+("Error getting pos=" + e); } ); }, 5000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.