监听网络状态
https://blog.csdn.net/hfy8971613/article/details/103336951
- 网络状态判别类:
public class NetworkUtil {
// 获取数据连接的制式类型
public static String getNetworkClass(NetworkInfo networkInfo) {
int subType = networkInfo.getSubtype();
switch (subType) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return "2G";
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return "3G";
case TelephonyManager.NETWORK_TYPE_LTE:
return "4G";
case TelephonyManager.NETWORK_TYPE_NR:
return "5G";
default:
return networkInfo.getTypeName();
}
}
}
- 广播类:
public class TestReceiver extends BroadcastReceiver {
private String TAG = "world.TestReceiver";
private static TestReceiver testReceiver;
private Context context;
private boolean isRegister;
public TestReceiver(Context context) {
this.context = context;
}
public synchronized static TestReceiver getInstance(Context context) {
if (testReceiver == null) {
// 创建一个网络变更的广播接收器
testReceiver = new TestReceiver(context);
}
return testReceiver;
}
public void register() {
if (isRegister) {
LogUtils.logError(TAG, "TestReceiver already register...");
return;
}
isRegister = true;
// 创建一个意图过滤器,只处理网络状态变化的广播
IntentFilter intentFilter = new IntentFilter();
// ConnectivityManager.CONNECTIVITY_ACTION 在 ConnectivityManager
// intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
context.registerReceiver(testReceiver, intentFilter);
}
public void unRegister() {
if (!isRegister) {
LogUtils.logError(TAG, "TestReceiver not Register...");
return;
}
isRegister = false;
context.unregisterReceiver(testReceiver);
}
@Override
// 一旦接收到网络变更的广播,马上触发接收器的onReceive方法
public void onReceive(Context context, Intent intent) {
if (intent != null) {
NetworkInfo networkInfo = intent.getParcelableExtra("networkInfo");
String networkClass = NetworkUtil.getNetworkClass(networkInfo);
String desc = String.format("%s \n %s 收到一个网络变更广播,网络大类为%s," +
"网络小类为%s,网络制式为%s,网络状态为%s",
"world", DateUtil.getNowTime(),
networkInfo.getTypeName(),
networkInfo.getSubtypeName(), networkClass,
networkInfo.getState().toString());
LogUtils.logError(TAG,desc);
Toast.makeText(context, desc, Toast.LENGTH_SHORT).show();
}
}
}
主函数:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
TestReceiver.getInstance(this.getApplicationContext()).register();
}
@Override
protected void onStop() {
super.onStop();
TestReceiver.getInstance(this.getApplicationContext()).unRegister();
}
}
- 相应:
2022-08-06 21:01:15.122 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-15 收到一个网络变更广播,网络大类为WIFI,网络小类为,网络制式为WIFI,网络状态为CONNECTED
2022-08-06 21:01:22.141 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-22 收到一个网络变更广播,网络大类为WIFI,网络小类为,网络制式为WIFI,网络状态为DISCONNECTED
2022-08-06 21:01:22.228 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-22 收到一个网络变更广播,网络大类为MOBILE,网络小类为LTE,网络制式为4G,网络状态为CONNECTED
2022-08-06 21:01:40.185 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-40 收到一个网络变更广播,网络大类为MOBILE,网络小类为LTE,网络制式为4G,网络状态为DISCONNECTED
2022-08-06 21:01:43.660 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-43 收到一个网络变更广播,网络大类为MOBILE,网络小类为LTE,网络制式为4G,网络状态为CONNECTED
2022-08-06 21:01:48.718 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-48 收到一个网络变更广播,网络大类为MOBILE,网络小类为LTE,网络制式为4G,网络状态为DISCONNECTED
2022-08-06 21:01:48.724 29604-29604/com.example.broadcaststudy E/world.TestReceiver: world
2022-08-06-21-01-48 收到一个网络变更广播,网络大类为WIFI,网络小类为,网络制式为WIFI,网络状态为CONNECTED