методы обратного вызова cordova-plugin-media

Я использую 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'

Эти события регистрации поступают на консоль, но их НЕТ в моем коде, поэтому они должны поступать из медиа-объекта.

Мне нужно получить изменение статуса и/или успешный обратный вызов, так как мне нужно обновить модель, чтобы включить воспроизведение, но снова, когда клип завершит воспроизведение.

есть идеи?


person Rich Schramm    schedule 06.11.2015    source источник
comment
Я работаю с Android, и кажется, что ни один из обратных вызовов не запускается!   -  person Ajoy    schedule 18.02.2016
comment
кто-нибудь из вас добился успеха в этом вопросе? или вы переключились на другой плагин, который действительно поддерживает обратные вызовы? Я только что попробовал Cordova-plugin-media 2.1.0 (на iOS 9.3.2) и все та же проблема.   -  person hreimer    schedule 30.06.2016


Ответы (1)


Покопавшись в этом глубже, я обнаружил, что (несмотря на документацию) обратные вызовы не реализованы для iOS в версии 1.0.1 плагина cordova-media. Они реализованы ТОЛЬКО для Android, FireOS и Windows.

В нижней части файла Media.js в каталоге www модуля он создает канал 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 об этом, если только это электронное письмо не приходит с адреса электронной почты apache.org, поэтому я не уверен, что они вообще знают об этом.

person Rich Schramm    schedule 06.11.2015