fix: catch 部分 DeadSystemException 异常
This commit is contained in:
@ -14,7 +14,7 @@ data class Meta(
|
||||
val dia: String? = "",
|
||||
val android_sdk: Int? = -1,
|
||||
val android_version: String? = "",
|
||||
val network: String? = "",
|
||||
var network: String? = "",
|
||||
val os: String? = "",
|
||||
val gid: String? = "",
|
||||
val oaid: String? = "",
|
||||
|
||||
@ -6,6 +6,7 @@ import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.ConnectivityManager
|
||||
import android.os.Build
|
||||
import android.os.DeadObjectException
|
||||
import android.provider.Settings
|
||||
import android.telephony.TelephonyManager
|
||||
import android.text.TextUtils
|
||||
@ -56,6 +57,7 @@ object MetaUtil {
|
||||
)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getMeta(): Meta {
|
||||
if (m == null) {
|
||||
refreshMeta()
|
||||
@ -199,39 +201,52 @@ object MetaUtil {
|
||||
return Build.VERSION.RELEASE
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新通用 meta 里缓存的 network 字段
|
||||
*/
|
||||
@JvmStatic
|
||||
fun updateCachedNetwork() {
|
||||
m?.network = getNetwork()
|
||||
}
|
||||
|
||||
fun getNetwork(): String? {
|
||||
// 有一定机率在 getActiveNetworkInfo 时触发 DeadSystemException,所以这里进行简单 try catch
|
||||
try {
|
||||
if (application.checkCallingOrSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED)
|
||||
return "unknown"
|
||||
|
||||
if (application.checkCallingOrSelfPermission(Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED)
|
||||
return "unknown"
|
||||
val activeNetwork =
|
||||
(application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo
|
||||
?: return "unknown"
|
||||
|
||||
val activeNetwork =
|
||||
(application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).activeNetworkInfo
|
||||
?: return "unknown"
|
||||
|
||||
return when (activeNetwork.type) {
|
||||
ConnectivityManager.TYPE_WIFI -> "WIFI"
|
||||
ConnectivityManager.TYPE_WIMAX -> "WIMAX"
|
||||
ConnectivityManager.TYPE_MOBILE -> {
|
||||
val telephonyManager = application.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
|
||||
if (telephonyManager.simState != TelephonyManager.SIM_STATE_READY) return "unknown"
|
||||
when (telephonyManager.networkType) {
|
||||
// Unknown
|
||||
TelephonyManager.NETWORK_TYPE_UNKNOWN -> "unknown"
|
||||
// Cellular Data–2G
|
||||
TelephonyManager.NETWORK_TYPE_EDGE, TelephonyManager.NETWORK_TYPE_GPRS, TelephonyManager.NETWORK_TYPE_CDMA,
|
||||
TelephonyManager.NETWORK_TYPE_IDEN, TelephonyManager.NETWORK_TYPE_1xRTT -> "2G"
|
||||
// Cellular Data–3G
|
||||
TelephonyManager.NETWORK_TYPE_UMTS, TelephonyManager.NETWORK_TYPE_HSDPA, TelephonyManager.NETWORK_TYPE_HSPA,
|
||||
TelephonyManager.NETWORK_TYPE_HSPAP, TelephonyManager.NETWORK_TYPE_HSUPA, TelephonyManager.NETWORK_TYPE_EVDO_0,
|
||||
TelephonyManager.NETWORK_TYPE_EVDO_A, TelephonyManager.NETWORK_TYPE_EVDO_B -> "3G"
|
||||
// Cellular Data–4G
|
||||
TelephonyManager.NETWORK_TYPE_LTE -> "4G"
|
||||
TelephonyManager.NETWORK_TYPE_NR -> "5G"
|
||||
else -> "unknown"
|
||||
return when (activeNetwork.type) {
|
||||
ConnectivityManager.TYPE_WIFI -> "WIFI"
|
||||
ConnectivityManager.TYPE_WIMAX -> "WIMAX"
|
||||
ConnectivityManager.TYPE_MOBILE -> {
|
||||
val telephonyManager = application.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
|
||||
if (telephonyManager.simState != TelephonyManager.SIM_STATE_READY) return "unknown"
|
||||
when (telephonyManager.networkType) {
|
||||
// Unknown
|
||||
TelephonyManager.NETWORK_TYPE_UNKNOWN -> "unknown"
|
||||
// Cellular Data–2G
|
||||
TelephonyManager.NETWORK_TYPE_EDGE, TelephonyManager.NETWORK_TYPE_GPRS, TelephonyManager.NETWORK_TYPE_CDMA,
|
||||
TelephonyManager.NETWORK_TYPE_IDEN, TelephonyManager.NETWORK_TYPE_1xRTT -> "2G"
|
||||
// Cellular Data–3G
|
||||
TelephonyManager.NETWORK_TYPE_UMTS, TelephonyManager.NETWORK_TYPE_HSDPA, TelephonyManager.NETWORK_TYPE_HSPA,
|
||||
TelephonyManager.NETWORK_TYPE_HSPAP, TelephonyManager.NETWORK_TYPE_HSUPA, TelephonyManager.NETWORK_TYPE_EVDO_0,
|
||||
TelephonyManager.NETWORK_TYPE_EVDO_A, TelephonyManager.NETWORK_TYPE_EVDO_B -> "3G"
|
||||
// Cellular Data–4G
|
||||
TelephonyManager.NETWORK_TYPE_LTE -> "4G"
|
||||
TelephonyManager.NETWORK_TYPE_NR -> "5G"
|
||||
else -> "unknown"
|
||||
}
|
||||
}
|
||||
|
||||
else -> "unknown"
|
||||
}
|
||||
else -> "unknown"
|
||||
} catch (e: DeadObjectException) {
|
||||
e.printStackTrace()
|
||||
return "unknown"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -93,49 +93,6 @@ public class NetworkUtils {
|
||||
return quickLoginHelper.isOpenMobileData(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前网络连接的类型信息
|
||||
*
|
||||
* @param context 上下文
|
||||
* @return 当前网络连接的类型信息
|
||||
*/
|
||||
public static String getConnectedType(Context context) {
|
||||
if (context != null) {
|
||||
context = context.getApplicationContext();
|
||||
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
|
||||
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo mNetworkInfo = mConnectivityManager
|
||||
.getActiveNetworkInfo();
|
||||
if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {
|
||||
switch (mNetworkInfo.getType()) {
|
||||
case ConnectivityManager.TYPE_BLUETOOTH:
|
||||
return "BLUETOOTH";
|
||||
case ConnectivityManager.TYPE_DUMMY:
|
||||
return "DUMMY";
|
||||
case ConnectivityManager.TYPE_ETHERNET:
|
||||
return "ETHERNET";
|
||||
case ConnectivityManager.TYPE_MOBILE:
|
||||
return "MOBILE";
|
||||
case ConnectivityManager.TYPE_MOBILE_DUN:
|
||||
return "MOBILE_DUN";
|
||||
case ConnectivityManager.TYPE_MOBILE_HIPRI:
|
||||
return "MOBILE_HIPRI";
|
||||
case ConnectivityManager.TYPE_MOBILE_MMS:
|
||||
return "MOBILE_MMS";
|
||||
case ConnectivityManager.TYPE_MOBILE_SUPL:
|
||||
return "MOBILE_SUPL";
|
||||
case ConnectivityManager.TYPE_WIFI:
|
||||
return "WIFI";
|
||||
case ConnectivityManager.TYPE_WIMAX:
|
||||
return "WIMAX";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return "NONE";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前移动网络连接的类型信息(当连接的网络是移动网络时使用)
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user