【发布时间】:2017-12-07 16:13:30
【问题描述】:
我有一个apiClass,它可以进行所有网络调用
我在想我的选择是:
检查
activity/fragment在
apiClient类中进行检查
我相信还有更好的选择。
编辑
This 回答建议我的第二个选择。有更好的方法吗?
【问题讨论】:
我有一个apiClass,它可以进行所有网络调用
我在想我的选择是:
检查activity/fragment
在apiClient 类中进行检查
我相信还有更好的选择。
编辑
This 回答建议我的第二个选择。有更好的方法吗?
【问题讨论】:
您可以在任何地方添加用于 Internet 连接的方法,但根据我的理解,对于代码/方法方法的重用,您可以创建 Util 类,也可以将其添加到 Application 类中。 也可以参考下面的方法。
public static boolean getConnectionStatus(Context context) {
ConnectivityManager mConnectivityManager;
NetworkInfo mNetworkInfoMobile, mNetworkInfoWifi;
mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
mNetworkInfoMobile = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
mNetworkInfoWifi = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
try {
if (mNetworkInfoMobile.isConnected()) {
App.connectivityStatus = 1;
return true;
}
} catch (Exception exception) {
// exception.printStackTrace();
}
if (mNetworkInfoWifi.isConnected()) {
App.connectivityStatus = 1;
return true;
} else {
App.connectivityStatus = 0;
return false;
}
}
【讨论】:
在 livedata 中创建类连接管理器
class Connectivity_check_internet(val context: Context) : LiveData<Boolean>() {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
var Connnectserver: Boolean? = false
val reciveconnctivitymanager = object : BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
Connnectserver=false
UnpdateConnection()
postValue(Connnectserver)
}
}
init {
UnpdateConnection()
}
fun UnpdateConnection(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
capabilities?.run {
Connnectserver=capabilities!!.hasTransport(TRANSPORT_CELLULAR) || capabilities.hasTransport(TRANSPORT_WIFI)
}
} else {
try {
val activeNetworkInfo = connectivityManager.activeNetworkInfo
Connnectserver = activeNetworkInfo != null && activeNetworkInfo.isConnected
} catch (e: Exception) {
}
}
}
override fun onActive() {
super.onActive()
context.registerReceiver(
reciveconnctivitymanager,
IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")
)
}
override fun onInactive() {
super.onInactive()
context.unregisterReceiver(reciveconnctivitymanager)
}
}
类 MainActivity : AppCompatActivity() { 懒惰的 val Connectivity_internet { Connectivity_check_internet(这个) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Connectivity_internet.observe(this,{
Log.e("TAG", "onCreate: "+it )
})
}
}
【讨论】: