代码之家  ›  专栏  ›  技术社区  ›  Anonymous

如何使WebView在后台播放视频或音频?

  •  0
  • Anonymous  · 技术社区  · 8 年前

    假设,我有以下基本应用程序:

    public class MainActivity extends AppCompatActivity {
    
       private WebView webView;
    
       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
    
           webView = (WebView) findViewById(R.id.webview);
           webView.getSettings().setJavaScriptEnabled(true);
    
           webView.setWebViewClient(new WebViewClient(){
    
               @Override
               public boolean shouldOverrideUrlLoading(WebView view, String url){
                   return true;
               }
    
           });
    
           webView.loadUrl("https://www.w3schools.com/html/html5_video.asp");
       }
    
    }
    

    现在,如果一个网站,例如。 https://www.w3schools.com/html/html5_video.asp ,包括视频或音频(由于用户可以打开任何网站,因此URL对我未知),并且用户打开另一个应用程序或关闭屏幕,则视频或音频将停止。

    但是,我希望它继续下去。它应该与Google Chrome类似:

    Videos continue playing in background when using Google Chrome

    我已经看到了解决方案,启动了一个后台声音服务,但是,如果我不知道视频/声音文件的URL,我如何才能找到它?我需要注入一些JavaScript还是有一个更干净的解决方案?

    我可以通过 JavascriptInterface ,但它通常是一个blob(例如在YouTube中)。我该怎么做?

    如你所见,我找到了解决办法。但是,我不确定这是否是一个干净的解决方案。有没有人有更好的解决方案,比如在通知栏中使用Chrome中的控件?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Anonymous    8 年前

    我找了很多遍,发现 this onWindowVisibilityChanged .

    public class MediaWebView extends WebView {
    
       public MediaWebView(Context context) {
           super(context);
       }
    
       public MediaWebView(Context context, AttributeSet attrs) {
           super(context, attrs);
       }
    
       public MediaWebView(Context context, AttributeSet attrs, int defStyleAttr) {
           super(context, attrs, defStyleAttr);
       }
    
       @Override
       protected void onWindowVisibilityChanged(int visibility) {
           if (visibility != View.GONE) super.onWindowVisibilityChanged(View.VISIBLE);
       }
    
    }
    

    推荐文章