Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách phát video YouTube trong ứng dụng Android bằng Kotlin

Giới thiệu

Ví dụ này minh họa cách nhúng và phát video YouTube trong ứng dụng Android sử dụng RecyclerView và WebView để tải iframe YouTube. Cách này không cần YouTube API key.

Các bước thực hiện

Bước 1: Tạo dự án mới

Android Studio > File > New Project > điền thông tin > Finish.

Bước 2: Layout chính (activity_main.xml)

Sử dụng RecyclerView để danh sách video:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="2dp"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

Bước 3: MainActivity.kt - Khởi tạo danh sách video

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.util.*

class MainActivity : AppCompatActivity() {
    private lateinit var recyclerView: RecyclerView
    private val youtubeVideos = mutableListOf<YouTubeVideo>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        recyclerView = findViewById(R.id.recyclerView)
        recyclerView.setHasFixedSize(true)
        recyclerView.layoutManager = LinearLayoutManager(this)

        // Thêm các video YouTube qua iframe
        youtubeVideos.add(YouTubeVideo(""""""))
        youtubeVideos.add(YouTubeVideo(""""""))
        youtubeVideos.add(YouTubeVideo(""""""))
        youtubeVideos.add(YouTubeVideo(""""""))
        youtubeVideos.add(YouTubeVideo(""""""))

        val videoAdapter = VideoAdapter(youtubeVideos)
        recyclerView.adapter = videoAdapter
    }
}

Bước 4: Model YouTubeVideo.kt

class YouTubeVideo(var videoUrl: String?)

Bước 5: VideoAdapter.kt

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebChromeClient
import android.webkit.WebView
import androidx.recyclerview.widget.RecyclerView

class VideoAdapter(private val youtubeVideoList: List<YouTubeVideo>) :
    RecyclerView.Adapter<VideoAdapter.VideoViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VideoViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.video_view, parent, false)
        return VideoViewHolder(view)
    }

    override fun onBindViewHolder(holder: VideoViewHolder, position: Int) {
        holder.videoWeb.loadData(youtubeVideoList[position].videoUrl!!, "text/html", "utf-8")
    }

    inner class VideoViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var videoWeb: WebView = itemView.findViewById(R.id.webView)
        init {
            videoWeb.settings.javaScriptEnabled = true
            videoWeb.webChromeClient = WebChromeClient()
        }
    }

    override fun getItemCount() = youtubeVideoList.size
}

Bước 6: Layout item video (video_view.xml)

<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="180dp">
</WebView>

Bước 7: AndroidManifest.xml - Cấp quyền Internet

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.youtubeplayer">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Danh sách video YouTube sẽ hiển thị, người dùng có thể cuộn và xem trực tiếp trong ứng dụng.

Lưu ý quan trọng

  • Cần bật JavaScript cho WebView: webView.settings.javaScriptEnabled = true.
  • Phải khai báo quyền INTERNET trong Manifest.
  • Cách này nhúng iframe, không phải player native. Để trải nghiệm tốt hơn, hãy dùng YouTube Android Player API chính thức.
  • Một số video có thể chặn nhúng (embedding disabled) và sẽ không phát.