public class NetworkController {
private static NetworkController Instance;
public static NetworkController getInstance() {
if (Instance == null) {
Instance = new NetworkController();
}
return Instance;
}
private static final String TAG = "NetworkAndSimCheck";
private ConnectivityManager connectivityManager;
public NetworkCallback networkCallback;
// 初始化网络状态变化监听器
public void initNetworkCallback() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.d(TAG, "initNetworkCallback: 初始化");
connectivityManager = (ConnectivityManager) MyApplication.getInstance().getSystemService(Context.CONNECTIVITY_SERVICE);
networkCallback = new NetworkCallback();
NetworkRequest networkRequest = new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.build();
connectivityManager.registerNetworkCallback(networkRequest, networkCallback);
}
}
// 网络状态变化监听器
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private class NetworkCallback extends ConnectivityManager.NetworkCallback {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
Log.d(TAG, "Network connection available.");
checkAndBlinkLedIfNoNetwork();
}
@Override
public void onLost(Network network) {
super.onLost(network);
Log.d(TAG, "Network connection lost.");
checkAndBlinkLedIfNoNetwork();
}
}
// 检查是否有可用的网络连接或SIM卡
public void checkAndBlinkLedIfNoNetwork() {
boolean hasNetwork = isNetworkAvailable(MyApplication.getInstance());
boolean hasSimCard = hasSimCard(MyApplication.getInstance());
if (!hasNetwork && !hasSimCard) {
LedController.getInstance().blinkLed("red", 500, 500); // 以500ms亮起、500ms熄灭的方式闪烁
} else {
LedController.getInstance().blinkLed("blue", 500, 500); // 以500ms亮起、500ms熄灭的方式闪烁
cscf_heartbeat_helper.getInstance().reStart();
}
}
// 检查是否有可用的网络连接
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
return false;
}
// 检查是否有SIM卡存在
public static boolean hasSimCard(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager != null) {
int simState = telephonyManager.getSimState();
return simState != TelephonyManager.SIM_STATE_ABSENT;
}
return false;
}
// 检查是否连接到Wi-Fi
public static boolean isWiFiConnected(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return wifiNetworkInfo != null && wifiNetworkInfo.isConnected();
}
return false;
}
// 检查是否连接到移动数据
public static boolean isMobileDataConnected(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo mobileNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
return mobileNetworkInfo != null && mobileNetworkInfo.isConnected();
}
return false;
}
// 检查SIM卡状态
public static String getSimState(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager != null) {
int simState = telephonyManager.getSimState();
switch (simState) {
case TelephonyManager.SIM_STATE_ABSENT:
return "SIM卡不存在";
case TelephonyManager.SIM_STATE_READY:
return "SIM卡已准备好";
case TelephonyManager.SIM_STATE_PIN_REQUIRED:
return "需要PIN码解锁";
case TelephonyManager.SIM_STATE_PUK_REQUIRED:
return "需要PUK码解锁";
case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
return "需要网络解锁";
case TelephonyManager.SIM_STATE_UNKNOWN:
default:
return "未知状态";
}
}
return "无法获取SIM卡状态";
}
}
10-11
1725

01-16
3698

03-01
3057
