以下是一个使用Android Kotlin编写的MediaPlayer和SurfaceView的视频播放器示例,包括网络状态监听的详细代码:

MainActivity.kt:

import android.content.IntentFilter
import android.net.ConnectivityManager
import android.os.Bundle
import android.view.SurfaceHolder
import android.view.SurfaceView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity(), SurfaceHolder.Callback, NetworkStateReceiver.NetworkStateChangeListener {

    private lateinit var surfaceView: SurfaceView
    private lateinit var surfaceHolder: SurfaceHolder
    private lateinit var mediaPlayer: MediaPlayer
    private lateinit var networkStateReceiver: NetworkStateReceiver

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

        surfaceView = findViewById(R.id.surfaceView)
        surfaceHolder = surfaceView.holder
        surfaceHolder.addCallback(this)

        mediaPlayer = MediaPlayer()

        networkStateReceiver = NetworkStateReceiver(this)
        registerReceiver(networkStateReceiver, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION))
    }

    override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(networkStateReceiver)
    }

    override fun surfaceCreated(holder: SurfaceHolder) {
        mediaPlayer.setDisplay(holder)
        mediaPlayer.setDataSource("http://example.com/video.mp4")
        mediaPlayer.prepareAsync()
        mediaPlayer.setOnPreparedListener {
            it.start()
        }
    }

    override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
        // Do nothing
    }

    override fun surfaceDestroyed(holder: SurfaceHolder) {
        mediaPlayer.release()
    }

    override fun onNetworkStateChanged(connected: Boolean) {
        if (connected) {
            Toast.makeText(this, "网络已连接", Toast.LENGTH_SHORT).show()
        } else {
            Toast.makeText(this, "网络已断开", Toast.LENGTH_SHORT).show()
        }
    }
}

NetworkStateReceiver.kt:

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager

class NetworkStateReceiver(private val listener: NetworkStateChangeListener) : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == ConnectivityManager.CONNECTIVITY_ACTION) {
            val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            val networkInfo = connectivityManager.activeNetworkInfo
            val connected = networkInfo != null && networkInfo.isConnected
            listener.onNetworkStateChanged(connected)
        }
    }

    interface NetworkStateChangeListener {
        fun onNetworkStateChanged(connected: Boolean)
    }
}

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

请确保在AndroidManifest.xml文件中添加以下权限:

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

这是一个简单的视频播放器示例,当SurfaceView创建时,MediaPlayer会从指定的URL准备并播放视频。还实现了一个NetworkStateReceiver来监听网络状态的变化,并在网络连接或断开时显示相应的Toast消息。请根据实际需求进行修改和扩展

Android kotlin MediaPlayer+SurfaceView视频播放 网络状态监听详细代码

原文地址: https://www.cveoy.top/t/topic/iyhB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录