Musicoo/app/src/main/java/melody/offline/music/http/MyHttpUtil.kt
2024-07-22 16:00:06 +08:00

117 lines
4.1 KiB
Kotlin

package melody.offline.music.http
import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import okhttp3.Callback
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.IOException
import java.util.concurrent.TimeUnit
class MyHttpUtil {
fun isNetworkAvailable(context: Context): Boolean {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetworkInfo = connectivityManager.activeNetworkInfo
return activeNetworkInfo != null && activeNetworkInfo.isConnected
}
private var mOkHttpClient: OkHttpClient? = null
companion object {
val mInstance: MyHttpUtil by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
MyHttpUtil()
}
}
private val CONNECT_TIMEOUT: Long = 60 //超时时间,秒
private val READ_TIMEOUT: Long = 60 //读取时间,秒
private val WRITE_TIMEOUT: Long = 60 //写入时间,秒
init {
val builder: OkHttpClient.Builder = OkHttpClient.Builder()
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
mOkHttpClient = builder.build()
}
private val mediaType = "application/json; charset=utf-8".toMediaType()
@Throws(IOException::class)
fun postSaveAppData(json: JSONObject, callback: Callback) {
val query: HashMap<String, String> = HashMap()
val body = BaseApiUtil.shared.initPostBody(
"POST",
BaseApiUtil.getAppDataURL,
query,
json
)
val path = BaseApiUtil.BaseUrl + BaseApiUtil.initialAddress
post(path, body, callback)
}
fun getIPInfo(callback: Callback) {
val query: HashMap<String, String> = HashMap()
val body = BaseApiUtil.shared.initPostBody(
"GET",
BaseApiUtil.getIPInfoUrl,
query
)
val path = BaseApiUtil.BaseUrl+ BaseApiUtil.initialAddress
post(path, body, callback)
}
fun post(path: String, postBody: String, callback: Callback) {
val requestBody = postBody.toRequestBody(mediaType)
val request: Request = Request.Builder()
.url(path)
.post(requestBody)
.build()
doAsync(request, callback)
}
/**
* 异步请求
*/
@Throws(IOException::class)
private fun doAsync(request: Request, callback: Callback) {
//创建请求会话
val call = mOkHttpClient!!.newCall(request)
//同步执行会话请求
call.enqueue(callback)
}
fun getNetworkType(context: Context): String {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val activeNetwork = connectivityManager.activeNetwork
val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork)
return when {
networkCapabilities == null -> "No connection"
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> "Wi-Fi"
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> "Mobile Data"
networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> "Ethernet"
else -> "Unknown"
}
}
fun isVpnConnected(context: Context): Boolean {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networks = connectivityManager.allNetworks
for (network in networks) {
val networkCapabilities = connectivityManager.getNetworkCapabilities(network)
if (networkCapabilities != null && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) {
return true
}
}
return false
}
}