LoginSignup
3
1

More than 1 year has passed since last update.

【Android】WebViewで表示されるIframe動画をフルスクリーンで表示する方法

Posted at

概要

WebViewでYouTube動画をフルスクリーンで表示する方法をまとめる

アプリに必要な権限をリクエストする

AndroidManifest.xml
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
src/main/java/com/example/online_sekkyaku_tablet/MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onStart() {
        super.onStart()
        setContentView(R.layout.activity_main);
        val webView: WebView = findViewById(R.id.webView)

        // 開発時のみデバッグ有効にする
        WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG);

        // JavaScript を有効にする
        webView.settings.javaScriptEnabled = true

        // webViewがメディア再生するためにユーザー操作を必要としなくする
        webView.settings.mediaPlaybackRequiresUserGesture = false;
        val webSettings: WebSettings = webView.settings

        webView.webChromeClient = object : WebChromeClient() {
            /**
             * Webコンテンツが指定されたリソースにアクセスするためのアクセス許可を要求
             * そのアクセス許可が現在許可または拒否されていないことをホストアプリケーションに通知
             */
            override fun onPermissionRequest(request: PermissionRequest) {
                // UIスレッドから別スレッドに切り離して処理をしてその結果をViewで表示
                runOnUiThread {
                    // Android 5.0 以上のバージョンの処理
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        // WebViewに必要なアクセス権限を設定
                        val PERMISSIONS = arrayOf(
                            // マイクなどのオーディオキャプチャデバイス
                            PermissionRequest.RESOURCE_AUDIO_CAPTURE,
                            // カメラなどのビデオキャプチャデバイス
                            PermissionRequest.RESOURCE_VIDEO_CAPTURE
                        )

                        /**
                         * 指定されたリソースにアクセスする許可を origin に与えます。
                         * 付与されたアクセス許可は、この WebView に対してのみ有効
                         */
                        request.grant(PERMISSIONS)
                    }
                }
            }

            /**
             * フルスクリーン検知
             */
            override fun onShowCustomView(view: View?, callback: CustomViewCallback?) {
                super.onShowCustomView(view, callback)

                // 縦・横幅を親に合わせる
                webView.addView(
                    view, ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.FILL_PARENT,
                        ViewGroup.LayoutParams.FILL_PARENT
                    )
                )
            }

            /**
             * フルスクリーン解除検知
             */
            override fun onHideCustomView() {
                super.onHideCustomView()

                // Viewをすべで抹消
                webView.removeAllViews();
            }
        }

        /**
         * デフォルトだとブラウザに飛ばされるからアプリ内遷移させる
         */
        webView.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(
                view: WebView?,
                request: WebResourceRequest?
            ): Boolean {
                return false
            }
        }

        webView.loadUrl(url);
    }

}
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1