Android kotlin MediaPlayer+SurfaceView视频播放 网络状态监听详细代码
以下是一个使用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消息。请根据实际需求进行修改和扩展
原文地址: https://www.cveoy.top/t/topic/iyhB 著作权归作者所有。请勿转载和采集!