WebView无法打开安卓默认视频播放器?

5
当我在我的android设备默认的浏览器上查看这个页面并点击第一个视频时,它会触发我的设备的默认视频播放器。它加载并播放。
然而当我在我的应用程序中使用WebView查看相同的链接时,它不会打开默认的视频播放器。可能出了什么问题?
我正在使用此链接中的webview代码。
我还按照文档所说的将webview设置为全屏模式,并使用以下代码进入全屏:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

编辑:我现在使用以下代码,但仍然不起作用,有任何想法吗?

package com.example.Playmp4OnWebView;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class PlayMp4OnWebView extends Activity {
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);

          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

          WebView webview = new WebView(this);
          setContentView(webview);

          WebSettings webSettings = webview.getSettings();
          webSettings.setJavaScriptEnabled(true);
          webSettings.setSupportZoom(false);
          webSettings.setPluginsEnabled(true);
          webSettings.setAllowFileAccess(true);

          webview.setWebViewClient(new WebViewClient(){

              public boolean shouldOverrideUrlLoading(WebView view, String url){
                   if(url.endsWith(".mp4")){
                        Intent i = new Intent(Intent.ACTION_VIEW);
                        i.setData(Uri.parse(url));
                        startActivity(i); //warning no error handling will cause force close if no media player on phone.
                        return true;
                   }
                   else return false; 
              }});

       //This will load the webpage that we want to see
        webview.loadUrl("http://www.broken-links.com/2010/07/30/encoding-video-for-android/");

     }
}
2个回答

3

如果您检测到具有支持的视频MIME类型的URL,请附加自己的WebViewClient并覆盖shouldOverrideUrlLoading(),然后返回true并使用该URL启动默认活动。这是一个未经测试的示例。

mWebView.setWebViewClient(new WebViewClient(){

public boolean shouldOverrideUrlLoading(Webview view, String url){
     if(url.endsWith(".mp4") || url.endsWith("some other supported type")){
          Intent i = new Intent(Intent.ACTION_VIEW);
          i.setData(Uri.parse(url));
          startActivity(i); //warning no error handling will cause force close if no media player on phone.
          return true;
     }
     else return false; 
}});

希望这可以帮到您。

嗨@schwiz,非常感谢您的回复,我已经使用我的更新代码和您的建议代码更新了问题。但它仍然无法触发我的设备的默认媒体播放器。有什么想法吗? - Kris
@Kris 如果它在同一个 Webview 中加载而不是启动活动或强制关闭,则 URL 不能以 mp4 结尾,我会在 shouldOverrideUrlLoading 中设置断点,看看里面发生了什么。 - Nathan Schwermann
当我点击视频时,什么也没有发生,它不会加载或启动任何活动或强制关闭。实际上,我点击的第一个视频并没有使用href,而是使用了html5 <video>标签。所以我认为它不会检测到您的条件url.endswith(".mp4")。有什么想法可以检测点击<video>标签以启动默认视频播放器吗? - Kris
无论如何,我现在正在使用Android默认的视频视图来播放我从SD卡中拥有的那些视频...谢谢 :) - Kris
1
@Kris 我能给的最好建议就是设置一个断点或将URL打印到日志中,看看你点击了什么,并想办法进行测试。 - Nathan Schwermann

2
如果在WebView中得到了一个html5视频标签,那么上面的代码(使用WebViewClient)将不会被调用,相反地,您必须使用WebChromeClient来处理它,如下面的链接所示。 如何在Android中的WebView中播放视频? 我已经尝试过了,它运行良好 :)
上面的代码(使用WebViewClient)仅在我们需要通过用户单击锚标记或通过WebView中的任何超链接来处理重定向请求到另一页时才有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接