2016-05-09 7 views
2

私は、webviewを使用しているAndroidアプリを持っている状況があります。ユーザーがYouTubeビデオにナビゲートすると、(オーディオ付きで)再生が開始され、ユーザーはデバイスのハードウェアスイッチを使用してデバイスをロックし、オーディオを再生し続けます。デバイスがロックされているとアンドロイドアプリの音声が再生されない

これは、デバイスのメニューを使用してアプリをバックグラウンドに送信したときや、アプリを終了したときには発生しません。

これがなぜ発生し、どのように停止するのか誰にも分かりますか?

EDIT:WebViewのは、あなたが電源を押したときユーチューブビデオからオーディオを再生し続けているので、私はGoogleがアプリを拒否して同じ問題を抱えていたApp enables background playing of videos, cordova issues, google play rejecting apps

+0

どのファイルを追加する必要がありますか? – me9867

答えて

5

:私はちょうどここに似た、未回答、ポストを見つけましたボタンを押して画面をオフにします。

何らかの理由で、電源ボタンを押してもWebviewのonPause()がトリガーされないため、オーディオが再生され続けているようです。これは、画面がオフになっている間に音楽を再生するのに便利ですが、GoogleではYouTubeの動画のこの動作が気に入らないのです。

は、あなたがこのようなあなたの活動/フラグメントのonPause()をオーバーライドすることができ、グーグルを幸せにするために:

@Override 
public void onPause() { 
    super.onPause(); 
    myCustomWebView.onPause(); 
} 

今ものWebViewのonPauseをトリガーする電源ボタンを押す()を。しかし、これは別の問題を引き起こします。スクリーンがオフの間に実際に再生し続けるオーディオはどうですか?

WebViewClientのonLoadResource()をオーバーライドして、リソースがyoutubeかどうかをチェックすることができます。これは、時間が来たときにwebviewのonPause()を呼び出す必要があるかどうかを判断します。このような何か:もちろん

myCustomWebView.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onLoadResource(WebView webview, String url) { 
     super.onLoadResource(webview, url); 
     if (url.contains("youtube.com")) mShouldPause = true; 
    } 

    //...... plus any other method you want to override 

}); 

、これはそれのURLに「youtube.com」を持っているすべてのリソースがフラグをトリガしますが、私の必要性のために、これは十分であろうことを意味しません。だから、onPause()メソッドは、今、このようになります。

@Override 
public void onPause() { 
    super.onPause(); 
    // mShouldPause is just a private boolean 
    if (mShouldPause) { 
     myCustomWebView.onPause(); 
    } 
    mShouldPause = false; 
} 

だからこれは私がリフレクションを使用してのWebViewの内部の仕組みをいじりせずに思い付いたソリューションです。オーディオを止めるボタンがある通知を作成したり、ユーザーがアプリに戻ってくるようにして、どのアプリがサウンドを作っているのを忘れたり、電話が幽霊になっていると思ったりすることはできません。

+0

ありがとう、それは動作します!あなたは伝説です。 –

関連する問題