3

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);
  }
};

さらに何か言う必要がある場合は、教えてください。

4

2 に答える 2

8

Media API は、PhoneGap が実行されているすべての OS で適切に正規化されていません。Android で assets フォルダーから何かを再生する場合は、フル パスを指定する必要があります。device.nameプロパティを使用してAndroid を使用しているかどうかを検出し、先頭に/android_asset/www/パスを追加することをお勧めします。

于 2012-12-05T15:43:13.673 に答える