1

这可能会节省一些阅读时间....尝试在我的 WEBVIEW 中播放 MP4 视频时,我不需要在 WEBVIEW 浏览器中播放视频。我完全可以接受一些可以为 Android 启动原生视频播放器的代码,只要它可以工作。如果有比我在这里找到的更好的解决方案,只要修改我的 WEBVIEW,我就全力以赴。

首先,我不是 Android 或 JAVA 开发人员。但是,提供代码并为我指明正确的方向通常会帮助我到达那里。在过去的 4 年里,我建立了一个拥有大量会员的网站。www.GoLiVeFitness.com 和 www.GoLiveFitness.com/Mobile。该解决方案是一个 Asp.Net 解决方案。它基本上是一个允许用户轻松搜索超过 4,800 个免费锻炼视频的网站。我们构建了应用程序的移动版本,它是一个缩小版但更简洁的版本。与其继续告诉用户将他们的智能手机浏览器指向移动网站,我决定使用 Android WebView 将网站加载到内置的 html5 浏览器中(如果我说得不正确,请原谅我)。

我完成了 webview,它完美地加载了网站。我什至能够将它部署在我的 Droid Charge 上,并且该网站完美地通过 web 视图加载。问题来了......所有类型的T-SQL(包括存储过程)正在查询和带回的动态视频将不会在webview中播放。当您单击播放按钮时,它看起来可能会启动,但它永远不会启动。我很快决定我的 webview 中没有足够的代码来处理类似的事情。同样,硬编码一些视频是行不通的。该网站有超过 4,800 个视频。例如,用户可以键入腿部并返回 130 次腿部锻炼。然后,他们可以通过触摸名称链接来选择一个并播放视频。****所以我的问题是如何让 WebView 浏览器播放 mp4 格式的视频。我在这里看到了一个可能有效的解决方案,但我 我在这方面还不够好,无法让代码正常工作。我希望有人可以帮助我修改代码以及我的 WebView。当我尝试时,我收到了很多,很多,很多错误。因此,我将首先粘贴在 WebView 浏览器中运行的 WebView 代码,然后粘贴解决方案代码,希望有人能告诉我应该更改哪些内容才能使其正常工作。警告:如果您能提供帮助,我很可能需要您真正向我展示正确的代码。同样,我对此很陌生。因此,我将首先粘贴在 WebView 浏览器中运行的 WebView 代码,然后粘贴解决方案代码,希望有人能告诉我应该更改哪些内容才能使其正常工作。警告:如果您能提供帮助,我很可能需要您真正向我展示正确的代码。同样,我对此很陌生。因此,我将首先粘贴在 WebView 浏览器中运行的 WebView 代码,然后粘贴解决方案代码,希望有人能告诉我应该更改哪些内容才能使其正常工作。警告:如果您能提供帮助,我很可能需要您真正向我展示正确的代码。同样,我对此很陌生。

-----我的 WebView 代码来自 GoLiveFitnessActivity.java 文件的代码---- package golivefitness.mob;

import android.app.Activity;
import android.drm.DrmManagerClient.OnErrorListener;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.VideoView;

public class GoLiveFitnessActivity extends Activity {

private WebView mWebView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    WebView mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.loadUrl("http://www.golivefitness.com/mobile");
    mWebView.setWebViewClient(new HelloWebViewClient());
}

   private class HelloWebViewClient extends WebViewClient {
       @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) 
       {
            view.loadUrl(url);
            return true;
        }
   }

   @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
       if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
           mWebView.goBack();
           return true;
       }
       return super.onKeyDown(keyCode, event);
   }
}

我从堆栈溢出复制的解决方案可能会解决我的问题 如何使用 android 在 webview 中播放视频?

public class InredisChromeClient extends WebChromeClient implements          OnCompletionListener, OnErrorListener {
private InterfazWebInredis interfazWeb; // Use Your WebView instance instead

private VideoView mCustomVideoView;

private LinearLayout mContentView;
private FrameLayout mCustomViewContainer;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
private LinearLayout mErrorConsoleContainer;
static final FrameLayout.LayoutParams COVER_SCREEN_GRAVITY_CENTER = new   FrameLayout.LayoutParams(
        ViewGroup.LayoutParams.FILL_PARENT,
        ViewGroup.LayoutParams.FILL_PARENT, Gravity.CENTER);

public InredisChromeClient(InterfazWebInredis iwi) {
    super();
    this.interfazWeb = iwi;
}

public void onShowCustomView(View view, CustomViewCallback callback) {
    // super.onShowCustomView(view, callback);
    if (view instanceof FrameLayout) {
        mCustomViewContainer = (FrameLayout) view;
        mCustomViewCallback = callback;
        mContentView = (LinearLayout) interfazWeb.findViewById(R.id.mainContainer);
        if (mCustomViewContainer.getFocusedChild() instanceof VideoView) {
            mCustomVideoView = (VideoView) mCustomViewContainer.getFocusedChild();
            // frame.removeView(video);
            mContentView.setVisibility(View.GONE);
            mCustomViewContainer.setVisibility(View.VISIBLE);
            interfazWeb.setContentView(mCustomViewContainer);
            mCustomVideoView.setOnCompletionListener(this);
            mCustomVideoView.setOnErrorListener(this);
            mCustomVideoView.start();
        }
    }
}

public void onHideCustomView() {
    if (mCustomVideoView == null)
        return;
    // Hide the custom view.
    mCustomVideoView.setVisibility(View.GONE);
    // Remove the custom view from its container.
    mCustomViewContainer.removeView(mCustomVideoView);
    mCustomVideoView = null;
    mCustomViewContainer.setVisibility(View.GONE);
    mCustomViewCallback.onCustomViewHidden();
    // Show the content view.
    mContentView.setVisibility(View.VISIBLE);
}

@Override
public void onCompletion(MediaPlayer mp) {
    mp.stop();
    mCustomViewContainer.setVisibility(View.GONE);
    onHideCustomView();
    interfazWeb.setContentView(mContentView);
}

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
    interfazWeb.setContentView(R.layout.main);
    return true;
}
}
4

1 回答 1

0

不知道你是否还在之后,但你可以在开始视频之前做这样的事情(我的视频存储在“res/raw”文件夹中):

您的 VideoView 初始化代码:

VideoView vd = (VideoView)view.findViewById(R.id.video);
vd.setVideoURI(Uri.parse("android.resource:/PACKAGE_NAME/" + getVideo(context, "videoName")));
vd.start();

获取动态视频的代码:

public static int getVideo(Context context, String name)
{
    Assert.assertNotNull(context);
    Assert.assertNotNull(name);

    return context.getResources().getIdentifier(name, "raw", context.getPackageName());
}

上面的代码基本上允许您将字符串名称传递给您的 setVideoURI 调用。第二段代码返回相关的 android ID 以播放视频(您可以在代码中的任何位置调用它)。

希望这可以帮助。

于 2012-11-20T14:14:19.617 回答