我想开发一种带有PhoneGap(Cordova 2.2.0)的媒体播放器,并将Adobe的Phonegap Build用于其他平台。这意味着几乎所有东西都必须是相对的;)我的应用程序的开发是在Android 2.3(最小目标)上。
这是我的问题:
文件的路径在从网络(http://...
)开始时效果很好,或者已经给出了如下所示的明确路径(/android_asset/www/media/song.mp3
)。但是,当尝试相对地(media/song.mp3
)时,歌曲将不会开始播放,给我一个错误代码:
MediaPlayer:错误(1,-2147483648)
如果我再次按下播放,我会再犯一些错误:
MediaPlayer:在状态0中调用//意味着没有文件
MediaPlayer:错误(-38,0)
MediaPlayer:错误(-38,0)
有没有办法让它相对有效,而不需要:
if(Android){
src=...
}
if(iOS){
src=...;
}...
上述选项非常耗时,如果其中一个平台的路径发生变化,则会出错。
这是缩小的Javascript代码:
var song;
var app = {
initialize : function() {
this.bindEvents();
},
bindEvents : function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
onDeviceReady : function() {
app.receivedEvent('deviceready');
song = new Media("/android_asset/www/media/song.mp3");
console.log("The song is: " + (song.mediaStatus!=0?"okay":"none"));
$('#play').click(function() {
song.play();
console.log("Song started");
});
$('#pause').click(function() {
song.pause();
console.log("Song paused");
});
$('#stop').click(function() {
song.stop();
console.log("Song stopped");
});
},
receivedEvent : function(id) {
console.log('Received Event: ' + id);
}
};
如果需要更多内容,请告诉我。
答案 0 :(得分:8)
在运行PhoneGap的所有操作系统上,Media API未正确规范化。如果您想在Android上的资源文件夹中播放某些内容,则需要指定完整路径。您可能最好使用device.name属性来检测您是否在Android上并且在 / android_asset / www / 路径前面。
答案 1 :(得分:0)
var media = {
basePath: '',
sounds: [],
init: function(){
if(device != undefined && device.platform == 'Android')
{
this.basePath = '/android_asset/www';
}
this.sounds['eggTap'] = new Media(this.basePath+'/sounds/click.mp3')
},
play: function(target){
this.sounds[target].stop()
this.sounds[target].play()
}
}