【问题标题】:WebView NOT opening android default video player?WebView 未打开 android 默认视频播放器?
【发布时间】:2011-06-06 01:46:01
【问题描述】:

当我在我的 android 设备的默认网络浏览器上查看 this page 并单击第一个视频时,它会触发我设备的默认视频播放器。它加载并播放。

但是,当我使用 WebView 在我的应用中查看相同的链接时,它不会打开默认的视频播放器。可能是什么问题?

我正在使用this link 中的 webview 代码。

我还像docs 中所说的那样将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/");

     }
}

【问题讨论】:

    标签: java android webview


    【解决方案1】:

    如果您检测到具有受支持的视频 mimetype 的 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 很好,如果它加载到同一个 web 视图中而不是启动一个活动或强制关闭,那么 URL 不能以 mp4 结尾,我会在 shouldOverrideUrlLoading 中设置一个断点,看看那里发生了什么。
    • 当我点击视频时,没有任何事情发生,它不会加载或启动任何活动或强制关闭。实际上,第一个 vid im 点击不使用 href,它使用 html5
    • 好吧,我现在正在使用 android 默认视频视图来播放我从 sdcard 获得的视频...谢谢 :)
    • @Kris 我可以给出的最佳建议是设置一个断点或将 URL 打印到日志中,然后查看您单击的内容并想办法对其进行测试。
    【解决方案2】:

    如果您在WebView 中获得html5 视频标签,则不会调用上述代码(使用WebViewClient),而是必须使用WebChromeClient 处理它,如下面的链接所示

    How to play a video in a webview with android?

    我试过了,效果很好:)

    上述代码(使用 WebViewClient)仅在我们必须通过用户单击锚标记或通过WebView 中的任何超链接处理到另一个页面的重定向请求时才有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2017-03-24
      • 2012-12-16
      • 1970-01-01
      相关资源
      最近更新 更多