2015-11-06 84 views
4

我正在使用cordova-media-plugin 1.0.1。在一个离子移动应用程序。我正在使用插件来播放音频文件。cordova-plugin-media回调方法

我能够得到它使用玩:

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'

这些记录事件会到控制台,但他们不是在我的代码所以他们必须来自媒体对象。

我需要的状态变化和/或成功的回调,因为我需要更新模型,以使播放,但时再剪辑完成比赛。

有什么想法?

+0

我正在使用android,似乎没有任何回调被解雇! – Ajoy

+0

你们有没有在这个问题上取得成功?还是你切换到另一个真正支持回调的插件?我只是尝试了cordova-plugin-media 2.1.0(在iOS 9.3.2上)并且仍然是同样的问题。 – hajn

回答

2

挖掘到这种更深层次后,我发现(尽管文件)回调并不适用于iOS的科尔多瓦 - 媒体插件版本1.0.1实现。它们仅适用于Android,FireOS和Windows。

在模块的www目录的Media.js文件的底部,它创建了一个科尔多瓦通道可以让它订阅邮件从本地播放器。不幸的是,该代码仅适用于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当它涉及到回调(虽然玩g仍然有效)。除非它是来自apache.org电子邮件地址的电子邮件,否则似乎没有办法向Apache提交错误报告,所以我不确定他们甚至不知道它。