2014-09-19 135 views
0

我是Ionic和Cordova的新手,所以我确定我缺少一些基本的东西,但是我的问题是打包的APK不能播放声音Android设备。我能得到声音的涟漪模拟器只用下面的代码罚款玩:Ionic/Cordova应用程序在模拟器中播放声音,但不在Android设备上播放声音

.controller('MainCtrl', ['$scope', function ($scope) { 
     $scope.playStartBell = function() { 
      var media = new Media('media/startBell.mp3', function() { 
       console.log('good'); 
      }, function (err) { 
       console.log('bad: ', err); 
      }); 
      media.play(); 
     }, 
      $scope.playStopBell = function() { 
      var media = new Media('media/stopBell.mp3', function() { 
       console.log('good'); 
      }, function (err) { 
       console.log('bad: ', err); 
      }); 
      media.play(); 
     } 
    }]) 

我用科尔多瓦安装媒体插件:$cordova plugin add org.apache.cordova.media

根据this SO post,一个值必须添加到config.xml中,但我不确定如何正确执行Ionic/Cordova。

+1

您可能需要考虑在这些函数之外创建Media对象,以便您可以缓存它们,而不是在每次执行时重新创建它们。 – 2014-09-19 11:45:04

+0

谢谢@RaymondCamden你能否为我的建议指出正确的方向?我正在考虑将这些代码转移到可在需要时注入的服务。这段代码就是我在框架中弄脏我的手。 – binarygiant 2014-09-19 14:23:11

+0

我甚至没有考虑过服务,只是将var x = new Media()行移到控制器的开头,然后在函数中访问x(使用更好的名称;)。 – 2014-09-19 19:19:24

回答

2

原来你已经指定路径开始,像这样的/ android_asset/www前缀:

/android_asset/WWW/

因此改变了我的代码,下面的工作。请注意,您需要检测您正在运行的设备以确定适当的位置。

.controller('MainCtrl', ['$scope', function ($scope) { 
     ///android_asset/www/ 
     $scope.playStartBell = function() { 
      var media = new Media('/android_asset/www/media/startBell.mp3', function() { 
       console.log('good'); 
      }, function (err) { 
       console.log('bad: ', err); 
      }); 
      media.play(); 
     }, 
      $scope.playStopBell = function() { 
      var media = new Media('/android_asset/www/media/stopBell.mp3', function() { 
       console.log('good'); 
      }, function (err) { 
       console.log('bad: ', err); 
      }); 
      media.play(); 
     } 
    }])