feat: 添加对网络状态监听的支持
This commit is contained in:
@ -2,16 +2,12 @@ package com.quyunshuo.androidbaseframemvvm.base.mvvm.v
|
|||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import androidx.viewbinding.ViewBinding
|
import androidx.viewbinding.ViewBinding
|
||||||
import com.alibaba.android.arouter.launcher.ARouter
|
import com.alibaba.android.arouter.launcher.ARouter
|
||||||
import com.jaeger.library.StatusBarUtil
|
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.R
|
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.mvvm.vm.BaseViewModel
|
import com.quyunshuo.androidbaseframemvvm.base.mvvm.vm.BaseViewModel
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.utils.BindingReflex
|
import com.quyunshuo.androidbaseframemvvm.base.utils.*
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusRegister
|
import com.quyunshuo.androidbaseframemvvm.base.utils.network.AutoRegisterNetListener
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.utils.EventBusUtils
|
import com.quyunshuo.androidbaseframemvvm.base.utils.network.NetworkStateChangeListener
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.utils.ViewRecreateHelper
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Activity基类
|
* Activity基类
|
||||||
@ -20,7 +16,7 @@ import com.quyunshuo.androidbaseframemvvm.base.utils.ViewRecreateHelper
|
|||||||
* @since 8/27/20
|
* @since 8/27/20
|
||||||
*/
|
*/
|
||||||
abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : AppCompatActivity(),
|
abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : AppCompatActivity(),
|
||||||
FrameView<VB> {
|
FrameView<VB>, NetworkStateChangeListener {
|
||||||
|
|
||||||
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) {
|
protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||||
BindingReflex.reflexViewBinding(javaClass, layoutInflater)
|
BindingReflex.reflexViewBinding(javaClass, layoutInflater)
|
||||||
@ -45,10 +41,18 @@ abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : AppComp
|
|||||||
|
|
||||||
setStatusBar()
|
setStatusBar()
|
||||||
mBinding.initView()
|
mBinding.initView()
|
||||||
|
initNetworkListener()
|
||||||
initObserve()
|
initObserve()
|
||||||
initRequestData()
|
initRequestData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化网络状态监听
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
private fun initNetworkListener() {
|
||||||
|
lifecycle.addObserver(AutoRegisterNetListener(this))
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置状态栏
|
* 设置状态栏
|
||||||
@ -57,6 +61,22 @@ abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : AppComp
|
|||||||
*/
|
*/
|
||||||
open fun setStatusBar() {}
|
open fun setStatusBar() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络类型更改回调
|
||||||
|
* @param type Int 网络类型
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
override fun networkTypeChange(type: Int) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络连接状态更改回调
|
||||||
|
* @param isConnected Boolean 是否已连接
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
override fun networkConnectChange(isConnected: Boolean) {
|
||||||
|
toast(if (isConnected) "网络已连接" else "网络已断开")
|
||||||
|
}
|
||||||
|
|
||||||
override fun isRecreate(): Boolean = mStatusHelper?.isRecreate ?: false
|
override fun isRecreate(): Boolean = mStatusHelper?.isRecreate ?: false
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
|||||||
@ -0,0 +1,41 @@
|
|||||||
|
package com.quyunshuo.androidbaseframemvvm.base.utils.network
|
||||||
|
|
||||||
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.LifecycleObserver
|
||||||
|
import androidx.lifecycle.OnLifecycleEvent
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动注册网络状态监听
|
||||||
|
* 使用的是[androidx.lifecycle.LifecycleObserver]来同步生命周期
|
||||||
|
*
|
||||||
|
* @author Qu Yunshuo
|
||||||
|
* @since 2021/7/11 4:56 下午
|
||||||
|
*/
|
||||||
|
class AutoRegisterNetListener constructor(listener: NetworkStateChangeListener) :
|
||||||
|
LifecycleObserver {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前需要自动注册的监听器
|
||||||
|
*/
|
||||||
|
private var mListener: NetworkStateChangeListener? = null
|
||||||
|
|
||||||
|
init {
|
||||||
|
mListener = listener
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
|
||||||
|
fun register() {
|
||||||
|
mListener?.run { NetworkStateClient.setListener(this) }
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
|
||||||
|
fun unregister() {
|
||||||
|
NetworkStateClient.removeListener()
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
|
||||||
|
fun clean() {
|
||||||
|
NetworkStateClient.removeListener()
|
||||||
|
mListener = null
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
package com.quyunshuo.androidbaseframemvvm.base.utils.network
|
||||||
|
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.Network
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时监听网络状态变化的[ConnectivityManager.NetworkCallback]实现类
|
||||||
|
*
|
||||||
|
* @author Qu Yunshuo
|
||||||
|
* @since 2021/7/10 5:38 下午
|
||||||
|
*/
|
||||||
|
class NetworkCallbackImpl : ConnectivityManager.NetworkCallback() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前网络类型
|
||||||
|
*/
|
||||||
|
var currentNetworkType = -1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前网络是否已连接
|
||||||
|
*/
|
||||||
|
var isConnected = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册的监听
|
||||||
|
*/
|
||||||
|
var changeCall: NetworkStateChangeListener? = null
|
||||||
|
|
||||||
|
override fun onAvailable(network: Network) {
|
||||||
|
super.onAvailable(network)
|
||||||
|
isConnected = true
|
||||||
|
changeCall?.networkConnectChange(isConnected)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLost(network: Network) {
|
||||||
|
super.onLost(network)
|
||||||
|
isConnected = false
|
||||||
|
changeCall?.networkConnectChange(isConnected)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
|
||||||
|
super.onCapabilitiesChanged(network, networkCapabilities)
|
||||||
|
if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
|
||||||
|
currentNetworkType = when {
|
||||||
|
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
|
||||||
|
NetworkCapabilities.TRANSPORT_WIFI
|
||||||
|
}
|
||||||
|
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
|
||||||
|
NetworkCapabilities.TRANSPORT_CELLULAR
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
NetworkCapabilities.TRANSPORT_WIFI
|
||||||
|
}
|
||||||
|
}
|
||||||
|
changeCall?.networkTypeChange(currentNetworkType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
package com.quyunshuo.androidbaseframemvvm.base.utils.network
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络状态改变监听起
|
||||||
|
*
|
||||||
|
* @author Qu Yunshuo
|
||||||
|
* @since 2021/7/11 4:56 下午
|
||||||
|
*/
|
||||||
|
interface NetworkStateChangeListener {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络类型更改回调
|
||||||
|
* @param type Int 网络类型
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
fun networkTypeChange(type: Int)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络连接状态更改回调
|
||||||
|
* @param isConnected Boolean 是否已连接
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
fun networkConnectChange(isConnected: Boolean)
|
||||||
|
}
|
||||||
@ -0,0 +1,60 @@
|
|||||||
|
package com.quyunshuo.androidbaseframemvvm.base.utils.network
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.net.NetworkRequest
|
||||||
|
import androidx.annotation.RequiresPermission
|
||||||
|
import com.quyunshuo.androidbaseframemvvm.base.BaseApplication
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络状态监听
|
||||||
|
*
|
||||||
|
* @author Qu Yunshuo
|
||||||
|
* @since 2021/7/11 3:58 下午
|
||||||
|
*/
|
||||||
|
object NetworkStateClient {
|
||||||
|
|
||||||
|
private val mNetworkCallback = NetworkCallbackImpl()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 注册网络监听客户端
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
|
||||||
|
fun register() {
|
||||||
|
val build = NetworkRequest.Builder().build()
|
||||||
|
val cm =
|
||||||
|
BaseApplication.context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
cm.registerNetworkCallback(build, mNetworkCallback)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置监听器
|
||||||
|
* @param listener NetworkStateChangeListener 监听器
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
fun setListener(listener: NetworkStateChangeListener) {
|
||||||
|
mNetworkCallback.changeCall = listener
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除监听器
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
fun removeListener() {
|
||||||
|
mNetworkCallback.changeCall = null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取网络类型 其他类型的网络归为了WIFI,如果需要细分,可以对[NetworkCallbackImpl]进行追加分类
|
||||||
|
* @return Int WIFI:[NetworkCapabilities.TRANSPORT_WIFI]、移动网络:[NetworkCapabilities.TRANSPORT_CELLULAR]
|
||||||
|
*/
|
||||||
|
fun getNetworkType(): Int = mNetworkCallback.currentNetworkType
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 网络是否连接
|
||||||
|
* @return Boolean
|
||||||
|
*/
|
||||||
|
fun isConnected(): Boolean = mNetworkCallback.isConnected
|
||||||
|
}
|
||||||
@ -12,6 +12,7 @@ import com.quyunshuo.androidbaseframemvvm.base.app.InitDepend
|
|||||||
import com.quyunshuo.androidbaseframemvvm.base.constant.VersionStatus
|
import com.quyunshuo.androidbaseframemvvm.base.constant.VersionStatus
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.utils.ProcessUtils
|
import com.quyunshuo.androidbaseframemvvm.base.utils.ProcessUtils
|
||||||
import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
|
import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
|
||||||
|
import com.quyunshuo.androidbaseframemvvm.base.utils.network.NetworkStateClient
|
||||||
import com.tencent.bugly.crashreport.CrashReport
|
import com.tencent.bugly.crashreport.CrashReport
|
||||||
import com.tencent.smtt.export.external.TbsCoreSettings
|
import com.tencent.smtt.export.external.TbsCoreSettings
|
||||||
import com.tencent.smtt.sdk.QbSdk
|
import com.tencent.smtt.sdk.QbSdk
|
||||||
@ -69,6 +70,7 @@ class CommonApplication : ApplicationLifecycle {
|
|||||||
if (ProcessUtils.isMainProcess(BaseApplication.context)) {
|
if (ProcessUtils.isMainProcess(BaseApplication.context)) {
|
||||||
worker.add { initMMKV() }
|
worker.add { initMMKV() }
|
||||||
worker.add { initARouter() }
|
worker.add { initARouter() }
|
||||||
|
main.add { initNetworkStateClient() }
|
||||||
}
|
}
|
||||||
worker.add { initTencentBugly() }
|
worker.add { initTencentBugly() }
|
||||||
return InitDepend(main, worker)
|
return InitDepend(main, worker)
|
||||||
@ -81,6 +83,15 @@ class CommonApplication : ApplicationLifecycle {
|
|||||||
initX5WebViewCore()
|
initX5WebViewCore()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化网络状态监听客户端
|
||||||
|
* @return Unit
|
||||||
|
*/
|
||||||
|
private fun initNetworkStateClient(): String {
|
||||||
|
NetworkStateClient.register()
|
||||||
|
return "NetworkStateClient -->> init complete"
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 腾讯TBS WebView X5 内核初始化
|
* 腾讯TBS WebView X5 内核初始化
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user