cordova-plugin-media回调方法

5

我正在使用Cordova Media插件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进行开发,但似乎没有任何回调被触发! - Ajoy
你们中有人在这个问题上取得了成功吗?或者你们换用了另一个真正支持回调的插件了吗?我刚刚尝试了cordova-plugin-media 2.1.0(在iOS 9.3.2上),但仍然存在同样的问题... - hreimer
1个回答

3

在深入研究后,我发现(尽管有文档),在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 添加到列表中,以查看是否只是代码中的错误,并且结果不尽如人意:
错误: 在插件“Media”中未定义方法“messageChannel:”
因此,我们这些为 iOS 或其他非 Android/Windows 平台构建应用程序的人在回调方面有困难(但播放仍然可以正常工作)。似乎没有办法向 Apache 提交关于此问题的错误报告,除非该邮件来自 apache.org 邮件地址,因此我不确定他们是否了解此问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接