23

HTML5ページにオーディオ要素があります。オーディオの再生を開始してから一時停止します。その後、ホームボタンを押してホーム画面に戻り、電話をかけます。通話が終了すると、オーディオ要素が自動的に再開されます。これはAndroid4.0.3で発生します

問題は、これが期待された望ましい動作ではないということです。残念ながら、ブラウザがバックグラウンドで実行されている場合、javascriptイベントはスローされず、Javascriptを使用してこの動作をキャッチして防止することはできません。

どんな助けでも大歓迎です。前もって感謝します。

4

5 に答える 5

8

私はそれを試すためのICS電話を持っていませんが、これが私がすることです:

pause明らかにオーディオの時間位置を追跡します。4.0は、オーディオファイルを一時停止した場所から自動的に再開するようです

したがって、一時停止する代わりにstop、オーディオファイルを使用できます。残念ながら、stopHTML5ではサポートされていません。

トリッキーな解決策があります:

  • pauseオーディオ
  • 位置を保存します:trackPos = myTrack.currentTime;
  • 店舗数:trackVol = myTrack.volume;
  • ミュート:myTrack.volume = 0;

次に、ユーザーが戻ってきてもう一度再生を押すと、次のようになります。

trackPosが存在する場合

  • 開始位置をtrackPosに設定します。myTrack.currentTime = trackPos;
  • play
  • mytrack.volume = trackVol;
  • delete window.trackPos;

これは注意が必要ですが、JavaScriptコントロールを使用している場合は機能するはずです。

ネイティブコントロールを使用する場合、再生と一時停止はブラウザのインターフェイスによって管理されます。次に、位置を保存して、REALを汚し始める必要があります。

  • ソースを削除します。

    myTrack.removeChid(yourSRCs)

  • SRCを復元し、焦点を合わせる

  • ユーザーがプレイするのを待つ

これは、テストされていない、迅速で汚いドラフトです。しかし、それは機能するはずです

///編集///

少なくとも私のデスクトップでは、動作するJavascriptデモ。ICSで試してみてください: JSFiddle

(ファイルを保存してください。電話でjsfiddleを正しく起動できないと思います)

于 2012-07-31T19:33:14.783 に答える
1

スクリプトブロックで次のことを試してください。動作するはずです。

var ppAudio = function(event){
    var ppMethod = (event.type == "blur")? "pause" : "play",
        audio = document.getElementsByTagName("audio"),
        l = audio.length;
    for (;l--;) audio[l][ppMethod]();
};

// window.onfocus = ppAudio;
window.onblur = ppAudio;

オンフォーカスイベントは必要ないと思います。しかし、ここではトグルの例を示します。

于 2012-08-03T01:31:25.027 に答える
0

手動で一時停止したかどうかに関係なく、ブール値を宣言して追跡できるので、フォーカスまたは別の適切なイベントで評価できます。

于 2012-07-30T16:29:53.237 に答える
0

オーディオオブジェクトをDOMから削除して、再生時に復元してみましたか?

于 2012-07-31T01:57:27.553 に答える
0

ブールスイッチを使用して「onFocus」イベントをにアタッチして、オーディオプレーヤーの以前の状態を判別します。以前の「一時停止」状態でフォーカスを取得した場合は、プレーヤーを停止するか、再生します。

于 2012-07-31T16:17:06.437 に答える