2012-04-16 57 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