2014-09-19 138 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(); 
     } 
    }])