3

我想开发一种带有PhoneGap(Cordova 2.2.0)的媒体播放器,并将Adobe的Phonegap Build用于其他平台。这意味着几乎所有东西都必须是相对的;)我的应用程序的开发是在 Android 2.3 上(最小目标)。

这是我的问题:

当文件的路径来自网络时http://.../android_asset/www/media/song.mp3但是,当尝试相对(media/song.mp3)执行此操作时,歌曲不会开始播放,给我一个错误代码:

媒体播放器:错误(1,-2147483648)

如果我再次按播放,我会收到更多错误:

MediaPlayer: start call in state 0 //表示没有文件
MediaPlayer: error (-38, 0)
MediaPlayer: Error (-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);
  }
};

如果还有什么需要说的,请告诉我。

4

2 回答 2

8

媒体 API 未在 PhoneGap 运行的所有操作系统上正确规范化。如果您想在 Android 上播放 assets 文件夹中的内容,则需要指定完整路径。您最好使用device.name属性来检测您是否在 Android 上并预先添加/android_asset/www/路径。

于 2012-12-05T15:43:13.673 回答
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()
}

}

于 2014-08-23T13:17:38.280 回答