【问题标题】:Phonegap beep/sound iOS ErrorPhonegap 哔声/声音 iOS 错误
【发布时间】:2012-04-16 14:18:31
【问题描述】:

我正在尝试使用 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() 但它们都抛出了同样的错误。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 我有同样的错误...啊,有人吗?
  • 听起来很傻,但你确定 iPad 没有静音吗?
  • 是的,我确定。检查并重新检查。

标签: ios cordova


【解决方案1】:

我很确定这是 Cordova 中的一个错误...

事情是这样的,我们从以下开始:

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 中没有方法 create...

因为没有“媒体”的“创建”方法,我们得到:

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;

【讨论】:

  • 更新:我刚刚得到 Cordova 成员的批准,从 JS 文件中调用“create()”绝对是一个错误
【解决方案2】:

当我的 PhoneGap.exec() 的第四个参数与我的 Objective-C 方法名称不匹配时,我遇到了这个错误。

验证错误消息中描述的“methodName”实际上是否存在于您的 Objective-C 实现中。

【讨论】:

  • 是的,你是对的。 CDVSound.h/m 文件中没有“创建”方法。我不知道在 exec() 调用中是否应该用另一个函数替换它。我尝试了一些,但似乎都没有奏效。我试图在旧文件和谷歌上搜索创建方法,但没有成功。
猜你喜欢
  • 2018-08-11
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多