这可能会节省一些阅读时间....试图在我的WEBVIEW中播放MP4视频我不需要在WEBVIEW浏览器中播放视频。我完全可以使用某些代码来解决本机视频播放器对于安卓的影响。如果有一个更好的解决方案,而不是我在这里找到什么,以及修改我的WEBVIEW,我都是为了它。
首先,我不是Android或JAVA开发人员。但是,提供代码并指出我正确的方向通常可以帮助我实现目标。在过去的4年里,我建立了一个拥有大量会员资格的网站。 www.GoLiVeFitness.com和www.GoLiveFitness.com/Mobile。该解决方案是Asp.Net解决方案。它基本上是一个网站,允许用户轻松搜索超过4,800个免费运动视频。我们构建了该应用程序的移动版本,该版本的版本大大缩小,但更加清晰。我决定不使用Android WebView将网站加载到内置的html5浏p>
我完成了webview,它完美地加载了网站。我甚至能够在我的Droid Charge上部署它,并且该网站完全通过webview加载。这就是问题....所有类型的T-SQL(包括存储过程)正在查询和恢复的动态视频将无法在webview中播放。单击播放按钮时,它看起来可能会启动,但它永远不会启动。我很快就决定在我的webview中没有足够的代码来处理类似的事情。同样,对一些视频进行硬编码是行不通的。这个网站有超过4,800个视频。例如,用户可以键入腿并返回130腿练习。然后,他们可以通过触摸名称链接选择一个并播放视频。 ****所以我的问题是如何启用WebView浏览器播放mp4格式的视频。我在这里看到了一个可能有效的解决方案,但是我对这个代码的工作方式还不够好。我希望有人可以帮我修改代码和我的WebView。当我尝试时,我收到很多很多错误。因此,我将首先粘贴我在WebView浏览器中运行的WebView代码,然后粘贴解决方案代码,希望有人可以告诉我应该更改哪些内容以使其正常工作。警告:如果您可以提供帮助,我很可能需要您真正向我显示正确的代码。我再次对此非常陌生。
-----来自我的GoLiveFitnessActivity.java文件中的WebView代码的代码---- 包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);
}
}
我从Stack溢出中复制的解决方案可以解决我的问题 How to play a video in a webview with android?
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;
}
}
答案 0 :(得分: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以播放视频(您可以在代码中的任何位置调用它)。
希望这有帮助。