Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 播放视频前如何检查互联网连接?_Android_Kotlin_Exoplayer - Fatal编程技术网

Android 播放视频前如何检查互联网连接?

Android 播放视频前如何检查互联网连接?,android,kotlin,exoplayer,Android,Kotlin,Exoplayer,我已经创建了exoplayer的活动,当我从main活动中单击播放按钮时,它将打开我的exoplayer活动文件并播放我的hls源代码。即使没有移动数据或wifi连接,它也试图打开exoplayer,并用控件显示黑色。如何在某些条件下修复此问题。我的android项目在科特林。我使用的是exoplayer 2.6.0版 package com.example.sample 导入android.net.Uri 导入android.os.Bundle 导入android.os.Handler 导入a

我已经创建了
exoplayer
的活动,当我从
main活动
中单击播放按钮时,它将打开我的exoplayer活动文件并播放我的hls源代码。即使没有移动数据或wifi连接,它也试图打开exoplayer,并用控件显示黑色。如何在某些条件下修复此问题。我的android项目在科特林。我使用的是exoplayer 2.6.0版

package com.example.sample
导入android.net.Uri
导入android.os.Bundle
导入android.os.Handler
导入android.view.view
导入android.view.WindowManager
导入androidx.appcompat.app.appcompat活动
导入com.google.android.exoplayer2.DefaultLoadControl
导入com.google.android.exoplayer2.defaultRendersFactory
导入com.google.android.exoplayer2.ExoPlayerFactory
导入com.google.android.exoplayer2.SimpleExoPlayer
导入com.google.android.exoplayer2.source.hls.HlsMediaSource
导入com.google.android.exoplayer2.trackselection.DefaultTrackSelector
导入com.google.android.exoplayer2.ui.SimpleExoPlayerView
导入com.google.android.exoplayer2.upstream.DefaultDataSourceFactory
类playlive:AppCompativeActivity(){
私有变量播放器:SimpleExoPlayer?=null
private val handler=handler()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u playlive)
window.decorView.systemui可见性=View.SYSTEM\u UI\u FLAG\u全屏
actionBar?.hide()
window.addFlags(WindowManager.LayoutParams.FLAG\u保持屏幕打开)
play()
}
私人娱乐{
玩家=
ExoPlayerFactory.newImpleInstance(默认渲染器工厂(此),
DefaultTrackSelector(),DefaultLoadControl())
val playerView=findviewbyd(R.id.player\u视图)
val uri=uri.parse(“http://localhost/tv2hls/live.m3u8")
playerView.player=玩家
val dataSourceFactory=DefaultDataSourceFactory(此“用户代理”)
val mediaSource=HlsMediaSource(uri、dataSourceFactory、handler、null)
播放器?准备(mediaSource)
玩家?.playwhenrady=true
}
覆盖桌面上的乐趣(){
super.onStop()
释放玩家()
releaseInstance()
}
重写onResume(){
super.onResume()
释放玩家()
resumePlayer()
}
重写onDestroy(){
super.ondestory()
释放玩家()
releaseInstance()
}
私人娱乐发布玩家(){
玩家?.release()
}
私人娱乐玩家(){
play()
}
}

使用此功能检查网络可用性

fun isNetwork(): Boolean{
        val connectivityManager = context?.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
        val networkInfo = connectivityManager.activeNetworkInfo
        // In here we return true if network is not null and Network is connected
        return if(networkInfo != null && networkInfo.isConnected){
            true
        }

    }
然后调用这个函数

if(isNetwork()){

  //Do your work here
}
else{

  //Network is not available do another work
}

使用此功能检查网络可用性

fun isNetwork(): Boolean{
        val connectivityManager = context?.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
        val networkInfo = connectivityManager.activeNetworkInfo
        // In here we return true if network is not null and Network is connected
        return if(networkInfo != null && networkInfo.isConnected){
            true
        }

    }
然后调用这个函数

if(isNetwork()){

  //Do your work here
}
else{

  //Network is not available do another work
}

您可以使用来自Android Jetpack组件的MutableLiveData,如下所示。这将帮助您,即使您已连接到WiFi,但WiFi没有互联网连接

object Network {

private var mMutableData : MutableLiveData<Boolean>? =null
fun isNetworkAvailableWithInternetAccess(mContext: Context): LiveData<Boolean> {
    mMutableData = MutableLiveData()
    val cm = mContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkInfo: NetworkInfo?
    networkInfo = cm.activeNetworkInfo
    if (networkInfo != null && networkInfo.isConnected) isInternetAvailable()
    return mMutableData!!
}

private var parentJob = Job()
private val coRoutineContext: CoroutineContext
    get() = parentJob + Dispatchers.Main

private fun isInternetAvailable() {
    val scope = CoroutineScope(coRoutineContext)
    scope.launch(Dispatchers.IO) {
        try {
            val sock = Socket()
            val socketAddress = InetSocketAddress("8.8.8.8", 53)

            sock.connect(socketAddress, 2000) // This will block no more than timeoutMs
            sock.close()

            mMutableData!!.postValue(true)

        } catch (e: IOException) {
            mMutableData!!.postValue(false)
        }
    }
}
}

您可以使用来自Android Jetpack组件的MutableLiveData,如下所示。这将帮助您,即使您已连接到WiFi,但WiFi没有互联网连接

object Network {

private var mMutableData : MutableLiveData<Boolean>? =null
fun isNetworkAvailableWithInternetAccess(mContext: Context): LiveData<Boolean> {
    mMutableData = MutableLiveData()
    val cm = mContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val networkInfo: NetworkInfo?
    networkInfo = cm.activeNetworkInfo
    if (networkInfo != null && networkInfo.isConnected) isInternetAvailable()
    return mMutableData!!
}

private var parentJob = Job()
private val coRoutineContext: CoroutineContext
    get() = parentJob + Dispatchers.Main

private fun isInternetAvailable() {
    val scope = CoroutineScope(coRoutineContext)
    scope.launch(Dispatchers.IO) {
        try {
            val sock = Socket()
            val socketAddress = InetSocketAddress("8.8.8.8", 53)

            sock.connect(socketAddress, 2000) // This will block no more than timeoutMs
            sock.close()

            mMutableData!!.postValue(true)

        } catch (e: IOException) {
            mMutableData!!.postValue(false)
        }
    }
}
}

兄弟,在你调用play()之前,请检查网络是否可用。你能解释一下怎么做吗兄弟,我是newbiefun isOnline(context:context):Boolean{val connectivityManager=context.getSystemService(context.CONNECTIVITY_SERVICE)由于ConnectivityManager val networkInfo=ConnectivityManager.activeNetworkInfo返回networkInfo!=null&&networkInfo.isConnected}如果上述方法返回true,则仅从MainActivityBrother调用play(),请在调用play()之前检查网络是否可用。请解释如何执行此操作,bro,我是newbiefun isOnline(context:context):Boolean{val connectivityManager=context.getSystemService(context.CONNECTIVITY_SERVICE)as connectivityManager val networkInfo=connectivityManager.activeNetworkInfo return networkInfo!=null&&networkInfo.isConnected}如果上述方法返回true,则只调用play()从您的Main Activity中,我收到两个错误未解决引用上下文和类型不匹配(必需的布尔值,找到:单位)这些错误。请告诉我们您是如何使用它的,如果您正在使用
Activity
我无法在注释部分添加代码,请将
上下文更改为
。如何共享代码?我收到2个错误未解决引用上下文和类型不匹配(必需的布尔值,找到:单位)。这些错误出现请向我们展示您如何使用它,如果您正在使用
活动
我无法在注释部分添加代码,请将
上下文
更改为
。如何共享代码?