2012-04-16 55 views
4

我試圖用PhoneGap/Cordova 1.6.0播放聲音文件。 當我播放的聲音我得到這些錯誤:Phonegap嗶聲/聲音iOS錯誤

ERROR: Method 'create:withDict:' not defined in Plugin 'Media' 
FAILED pluginJSON = {"className":"Media","methodName":"create","arguments":["INVALID","94671882-85c3-9173-17a2-ed166310d77d","beep.wav"]} 

即使我得到這些錯誤信息的聲音在模擬器玩,但不是我的設備(iPad 2的5.1)上。我已經嘗試了navigator.notification.beep和新的媒體(),但他們都拋出同樣的錯誤。

有誰知道如何解決這個問題?

+0

我有同樣的錯誤... argh任何人? – Francesco 2012-04-17 14:57:43

+0

聽起來很愚蠢,但你確定iPad沒有靜音嗎? – Marius 2012-04-19 12:05:07

+0

是的,我確定。已檢查並重新檢查。 – 2012-04-22 19:24:19

回答

0

我敢肯定它在科爾多瓦的錯誤...

這是怎麼一回事呢,我們先從:

navigator.notification.beep 

將觸發(科爾多瓦,1.6.1.js) :

beep:function(count) { 
     (new Media('beep.wav')).play(); 
    } 

創建媒體對象將導致:

var Media = function(src, successCallback, errorCallback, statusCallback) { 

// successCallback optional 
if (successCallback && (typeof successCallback !== "function")) { 
    console.log("Media Error: successCallback is not a function"); 
    return; 
} 

// errorCallback optional 
if (errorCallback && (typeof errorCallback !== "function")) { 
    console.log("Media Error: errorCallback is not a function"); 
    return; 
} 

// statusCallback optional 
if (statusCallback && (typeof statusCallback !== "function")) { 
    console.log("Media Error: statusCallback is not a function"); 
    return; 
} 

this.id = utils.createUUID(); 
mediaObjects[this.id] = this; 
this.src = src; 
this.successCallback = successCallback; 
this.errorCallback = errorCallback; 
this.statusCallback = statusCallback; 
this._duration = -1; 
this._position = -1; 
exec(null, this.errorCallback, "Media", "create", [this.id, this.src]); 
}; 

如果你看看Cordova.plist,你會看到插件名稱「Media」被映射到「CDVSound」,並且在CDVSound中沒有方法創建...

而且因爲沒有方法「創建」我們得到的「媒體」:

cleanApp[24713:707] ERROR: Method 'create:withDict:' not defined in Plugin 'Media' 
cleanApp[24713:707] FAILED pluginJSON = {"className":"Media","methodName":"create","arguments":["INVALID","b6acfbad-1e26-de77-1557-0d7c2f87a00a","beep.wav"]} 

那麼我們怎麼能聽到聲音?

很好的問題。如果你看看:

new Media('beep.wav')).play(); 

你注意到我們調用play(),讓我們來看看是什麼呢:

Media.prototype.play = function(options) { 
    exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]); 
}; 

在CDVSound.h:

- (void) startPlayingAudio:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; 
+0

更新:我剛剛得到科爾多瓦成員的批准,從JS文件調用「create()」肯定是一個bug – 2012-05-31 07:47:59

0

當我的PhoneGap.exec()的第四個參數與我的Objective-C方法名稱不匹配時,遇到此錯誤。

驗證錯誤消息中描述的「methodName」實際上是否存在於Objective-C實現中。

+0

是的,你是對的。 CDVSound.h/m文件中沒有「創建」的方法。我不知道是否有另一個函數,我應該在exec()調用中替換它。我嘗試了一些,但似乎沒有任何工作。 我試圖在舊文件和谷歌搜索創建方法,但沒有成功。 – 2012-04-19 08:24:35