如何在加载页面(视图)时在离子中播放音频mp3

时间:2015-03-23 10:34:55

标签: android ios angularjs cordova ionic

我想在我的页面加载时在后台播放音频mp3,所以如果我使用按钮点击,它可以工作,但如果我尝试在我的控制器加载$ state时播放它,它不起作用:

angular.module('starter', ['ionic','ngCordova'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {

    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
})
.controller("ExampleController", function($scope, $cordovaMedia) {

    $scope.play = function(url) {
        var my_media = new Media(url,
            function () {
                console.log("playAudio() : success");
           },
            function (err) {
                 console.log("playAudio() : : "+err);
           });
        my_media.play();
    };
   $scope.play('/android_asset/www/someAudio.mp3');
});

2 个答案:

答案 0 :(得分:1)

$ scope.play未定义。你的意思是定义一个my_media的函数吗?您需要稍微改变一下:

$scope.play = function(url) {
    var my_media = new Media(url,
        function () {
            console.log("playAudio() : success");
       },
        function (err) {
             console.log("playAudio() : : "+err);
       });
    my_media.play();
};

答案 1 :(得分:0)

感谢您的帮助,答案是:

  $scope.play = function() {
      var mp3URL = getMediaURL("sounds/yourMp3AudioFile.mp3");
      var media = new Media(mp3URL, null, null, mediaStatusCallback);
      media.play();
   } 
   var mediaStatusCallback = function(status) {
       if(status == 1) {
           $ionicLoading.show({template: 'Loading...'});
       } else {
           $ionicLoading.hide();
       }
   }
   function getMediaURL(s) {
       var isAndroid = ionic.Platform.isAndroid();
       if(isAndroid) return "/android_asset/www/" + s;
       return s;
    }
   $timeout(function() {
       $scope.play();
   }, 1000);