我正在尝试使用PhoneGap / Cordova 1.6.0播放声音文件。 当我播放声音时,我得到了这些错误:
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和new Media(),但它们都会抛出相同的错误。
有谁知道如何解决这个问题?
答案 0 :(得分:0)
当我的PhoneGap.exec()的第四个参数与我的Objective-C方法名称不匹配时,我遇到了此错误。
确认您的Objective-C实现中存在错误消息中描述的“methodName”。
答案 1 :(得分:0)
我很确定这是科尔多瓦的一个错误......
这是怎么回事,我们从:
开始navigator.notification.beep
将触发(cordova-1.6.1.js):
beep:function(count) {
(new Media('beep.wav')).play();
}
创建Media对象将导致:
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中没有方法创建...
因为“Media”没有“创建”方法,所以我们得到:
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;