我在www文件夹中有一个mp3,我需要播放它。 该文件存在,我已经解压缩了构建,我可以从IDE(Monaca)中看到它。 我使用Cordova 6.2和cordova-plugin-media 2.3.0,在HTC ONE M7上进行测试。
//"use strict";
var app = angular.module('starter.controllers')
//http://www.tutorialspoint.com/ionic/ionic_media.htm
.controller('PlayerCtrl', function($scope, $ionicPlatform, $cordovaMedia,$cordovaFile) {
$ionicPlatform.ready(function() {
var src = "/android_asset/www/test.mp3";
$scope.media = new Media(src,
function() {
console.log("playAudio Success");
},
function(error) {
console.log("playAudio Error: " + error.code);
console.log(JSON.stringify(error));
});
$scope.media.play();
console.log('play '+ JSON.stringify( $scope.media));
var mediaTimer = setInterval(function () {
console.log('play '+ JSON.stringify( $scope.media));
if($scope.media){
// get media position
$scope.media.getCurrentPosition(
// success callback
function (position) {
if (position > -1) {
console.log('Position '+(position) + " sec");
}
},
// error callback
function (e) {
console.log("Error getting pos=" + e);
}
);
}else{
console.log('no media');
}
}, 5000);
$cordovaFile.checkFile(cordova.file.applicationDirectory, 'www/test.mp3').then(function(result) {
console.log('file found' ) ;
console.log('URL: ' + JSON.stringify(result));
fileUrl = result.nativeURL;
}, function(err) {
console.log('file not found') ;
});
});
});
当我在手机上运行时,无法找到它并且cordovaMedia无法播放它,我在下面的日志中收到错误,但文件在APK中。
playAudio Error: 1
www/js/PlayerCtrl.js:16 HTC One{"code":1}
www/js/PlayerCtrl.js:50 HTC Onefile not found
www/js/PlayerCtrl.js:24 HTC Oneplay {"id":"1a6fb84c-b28f-f227-1ff2-d2baf5bf0610","src":"/android_asset/www/test.mp3","_duration":-1,"_position":-1}
www/js/PlayerCtrl.js:31 HTC OnePosition -0.001 sec
我有想法,有什么建议吗? 非常感谢!
答案 0 :(得分:0)
我在media插件的官方文档中找到了
`NOTE: cdvfile path is supported as src parameter:`
var my_media = new Media('cdvfile://localhost/temporary/recording.mp3', ...);
答案 1 :(得分:0)
显然,当使用Monaca Ide调试器运行应用程序时,www文件夹无法访问,或者至少它不在/ android_assets上。 我构建并安装了应用程序作为普通的apk,它工作。
答案 2 :(得分:0)
这是我用来在Android上获取正确路径的功能,它甚至可以在iOS上运行。有了这个,我就可以播放Cordova媒体插件所展示的媒体。
define()
因此,对于您的示例,它将是:
function getPath (){
var str = location.pathname;
var i = str.lastIndexOf('/');
return str.substring(0,i+1);
}