【问题标题】:cordova-plugin-media callback methodscordova-plugin-media 回调方法
【发布时间】:2015-11-06 21:49:31
【问题描述】:

我正在使用cordova-media-plugin 1.0.1。在 Ionic 移动应用程序中。我正在使用插件播放音频文件。

我可以使用:

var media = $cordovaMedia.newMedia(fileToPlay,
           // success callback
          mediaSuccess,

          // error callback
          mediaFailure,

          // status callback
          mediaStatus
        );

然后我可以在它播放文件时调用 media.play()。

但是,回调似乎永远不会执行。我将它们定义为:

 function mediaSuccess () {
      console.log("Successfully finished task.");
    }
      
    function mediaFailure (err) {
      console.log("An error occurred: " + err.code);
    }

    function mediaStatus (status) {
      console.log("A status change occurred: " + status.code);
    }

但它们永远不会被调用。但是,在我的控制台中,我在播放器开始和停止播放时看到了来自播放器本身的日志记录:

Will attempt to use file resource '//var/mobile/Containers/Data/Application/931BFA01-CDA4-43CD-BC16-7FB6A64305DC/Library/NoCloud/DateTime-1446772191539audio_007.wav'

Playing audio sample '//var/mobile/Containers/Data/Application/931BFA01-CDA4-43CD-BC16-7FB6A64305DC/Library/NoCloud/DateTime-1446772191539audio_007.wav'

Stopped playing audio sample '//var/mobile/Containers/Data/Application/931BFA01-CDA4-43CD-BC16-7FB6A64305DC/Library/NoCloud/DateTime-1446772191539audio_007.wav'

这些日志事件将发送到控制台,但它们不在我的代码中,因此它们必须来自媒体对象。

我需要获取状态更改和/或成功回调,因为我需要更新模型以启用播放,但在剪辑完成播放时再次进行。

有什么想法吗?

【问题讨论】:

  • 我正在使用 android,似乎没有任何回调被触发!
  • 你们中有人在这个问题上取得了成功吗?还是您切换到另一个真正支持回调的插件?我刚刚尝试了 cordova-plugin-media 2.1.0(在 iOS 9.3.2 上),但仍然是同样的问题..

标签: cordova cordova-plugins ngcordova


【解决方案1】:

在深入研究之后,我发现(尽管有文档)在 cordova-media-plugin 的 1.0.1 版本中没有为 iOS 实现回调。它们仅适用于 Android、FireOS 和 Windows。

在模块的 www 目录中的 Media.js 文件的底部,它创建了一个 cordova 频道,它可以订阅来自本机播放器的消息。不幸的是,该代码仅适用于 android、fireos 和 windows phone:

if (cordova.platformId === 'android' || cordova.platformId === 'amazon-fireos' || cordova.platformId === 'windowsphone') {

    var channel = require('cordova/channel');

    channel.createSticky('onMediaPluginReady');
    channel.waitForInitialization('onMediaPluginReady');

    channel.onCordovaReady.subscribe(function() {
        exec(onMessageFromNative, undefined, 'Media', 'messageChannel', []);
        channel.initializationComplete('onMediaPluginReady');
    });
}

我尝试将 ios 添加到列表中,以查看它是否只是该代码中的一个缺失并且它爆炸了:

错误:方法“messageChannel:”未在插件“媒体”中定义

所以......我们这些为 iOS 或其他非 Android/Windows 平台构建的人在回调方面是 SOL(尽管播放仍然有效)。除非是来自 apache.org 电子邮件地址的电子邮件,否则似乎无法向 Apache 提交错误报告,所以我不确定他们是否知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多