android - 如何在WebView中搜索Youtube视频?

标签 android webview youtube

我有一个Android应用程序,它有两个 Activity :一个 Activity 是Youtube Webview,另一个 Activity 是mainactivity,它从键盘上获取一个字符串。

当我启动Webview Activity 时,有什么方法可以显示在Youtube中搜索到的字符串吗?

谢谢

最佳答案

是的,您可以在webview中搜索和播放视频

enter image description here

public class UniversalWebViewFragment extends Fragment {

    private static final String GOOGLE_SERACH_URL = "https://www.google.com/search?q=";

    private static final String YOUTUBE_SERACH_URL = "https://www.youtube.com/results?search_query=android";

    private WebView webView;
    private FrameLayout customViewContainer;
    private WebChromeClient.CustomViewCallback customViewCallback;
    private View mCustomView;
    private myWebChromeClient mWebChromeClient;
    private myWebViewClient mWebViewClient;

    public static UniversalWebViewFragment newInstance() {

        return new UniversalWebViewFragment();
    }

    public void searchOnGoogle(String key) {
        webView.loadUrl(GOOGLE_SERACH_URL + key);
    }

    public void searchOnYoutube(String key) {
        webView.loadUrl(YOUTUBE_SERACH_URL + key);
    }

    /**
     * Called when the activity is first created.
     */

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.universal_web_view,
                container, false);

        customViewContainer = (FrameLayout) rootView
                .findViewById(R.id.customViewContainer);
        webView = (WebView) rootView.findViewById(R.id.webView);

        mWebViewClient = new myWebViewClient();
        webView.setWebViewClient(mWebViewClient);

        mWebChromeClient = new myWebChromeClient();
        webView.setWebChromeClient(mWebChromeClient);
        webView.getSettings().setJavaScriptEnabled(true);

        // Important for PayUMoney
        webView.getSettings().setDomStorageEnabled(true);

        webView.getSettings().setAppCacheEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setSaveFormData(true);
        webView.loadUrl(GOOGLE_SERACH_URL);
        // webView.requestFocus();

        // Handle Back keyPress
        rootView.setFocusableInTouchMode(true);
        rootView.requestFocus();
        rootView.setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {

                if (keyCode == KeyEvent.KEYCODE_BACK) {

                    return true;

                }
                // return super.onKeyDown(keyCode, event);
                return true;
            }
        });

        return rootView;
    }

    public boolean inCustomView() {
        return (mCustomView != null);
    }

    public void hideCustomView() {
        mWebChromeClient.onHideCustomView();
    }

    @Override
    public void onPause() {
        super.onPause(); // To change body of overridden methods use File |
                            // Settings | File Templates.
        webView.onPause();
    }

    @Override
    public void onResume() {
        super.onResume(); // To change body of overridden methods use File |
                            // Settings | File Templates.
        webView.onResume();
    }

    @Override
    public void onStop() {
        super.onStop(); // To change body of overridden methods use File |
                        // Settings | File Templates.
        if (inCustomView()) {
            hideCustomView();
        }
    }

    class myWebChromeClient extends WebChromeClient {
        private View mVideoProgressView;

        @Override
        public void onShowCustomView(View view, int requestedOrientation,
                CustomViewCallback callback) {
            onShowCustomView(view, callback); // To change body of overridden
                                                // methods use File | Settings |
                                                // File Templates.
        }

        @Override
        public void onShowCustomView(View view, CustomViewCallback callback) {

            // if a view already exists then immediately terminate the new one
            if (mCustomView != null) {
                callback.onCustomViewHidden();
                return;
            }
            mCustomView = view;
            webView.setVisibility(View.GONE);
            customViewContainer.setVisibility(View.VISIBLE);
            customViewContainer.addView(view);
            customViewCallback = callback;
        }

        @Override
        public View getVideoLoadingProgressView() {

            if (mVideoProgressView == null) {
                LayoutInflater inflater = LayoutInflater.from(getActivity());
                mVideoProgressView = inflater.inflate(R.layout.video_progress,
                        null);
            }
            return mVideoProgressView;
        }

        @Override
        public void onHideCustomView() {
            super.onHideCustomView(); // To change body of overridden methods
                                        // use File | Settings | File Templates.
            if (mCustomView == null)
                return;

            webView.setVisibility(View.VISIBLE);
            customViewContainer.setVisibility(View.GONE);

            // Hide the custom view.
            mCustomView.setVisibility(View.GONE);

            // Remove the custom view from its container.
            customViewContainer.removeView(mCustomView);
            customViewCallback.onCustomViewHidden();

            mCustomView = null;
        }
    }

    class myWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }

        private int webViewPreviousState;

        private final int PAGE_STARTED = 0x1;

        private final int PAGE_REDIRECTED = 0x2;

        Dialog dialog = new Dialog(getActivity());

        /*
         * (non-Javadoc)
         * 
         * /* (non-Javadoc)
         * 
         * @see
         * android.webkit.WebViewClient#onPageStarted(android.webkit.WebView,
         * java.lang.String, android.graphics.Bitmap)
         */
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            webViewPreviousState = PAGE_STARTED;

            if (dialog == null || !dialog.isShowing())
                dialog = ProgressDialog.show(getActivity(), "",
                        "Loading Please Wait", true, true,
                        new OnCancelListener() {

                            @Override
                            public void onCancel(DialogInterface dialog) {
                                // do something
                            }
                        });
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            if (webViewPreviousState == PAGE_STARTED) {
                if (null != dialog)
                    dialog.dismiss();
                dialog = null;
            }

        }
    }

}

这是YouTube的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <WebView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/webView"
            android:layout_gravity="center"
            />
    <FrameLayout
            android:id="@+id/customViewContainer"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:visibility="gone"
            />
</LinearLayout>

YouTube进度版式
  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/progress_indicator"
                  android:orientation="vertical"
                  android:layout_centerInParent="true"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent">

        <ProgressBar android:id="@android:id/progress"
                     style="?android:attr/progressBarStyleLarge"
                     android:layout_gravity="center"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"/>

        <TextView android:paddingTop="5dip"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_gravity="center"
                  android:text="loading"
                  android:textSize="14sp"
                  android:textColor="?android:attr/textColorPrimary"/>
    </LinearLayout>

这样使用
universalWebViewFragment = UniversalWebViewFragment.newInstance();
getFragmentManager().beginTransaction()
        .add(R.id.frame_root, universalWebViewFragment).commit();

搜索像这样的视频
                    universalWebViewFragment.searchOnYoutube(searchView
                            .getText().toString());

不要忘记添加权限
 <uses-permission android:name="android.permission.INTERNET" />

在这里找到完整的项目https://github.com/hiteshsahu/UniversalWebPageLoader

关于android - 如何在WebView中搜索Youtube视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27877860/

相关文章:

javascript - 解析 Youtube 视频源 XML

android - 带有标题和 MergeAdapter 的可点击 ListViews 在 ListItemClick 上使应用程序崩溃

javascript - 在页面加载时将 javascript 函数注入(inject) WebView

macos - 当我尝试在 Dropbox 中允许 Xamarin Mac 应用程序时,它没有反应

android - 删除 CAB 但保留 webview 文本选择

node.js - 当第一首歌曲流完成时如何修复 "Stream is not generating quickly enough"错误?

android - 如何使用 opengl-es 2.0 在 android 中填充多边形?

android - Google Play 应用签名和 Facebook 登录

android - 无法获取我设备的 IP 地址

php - 有人上传视频时通知