In Android development, monitoring network connection status is a common requirement because many features depend on network connectivity. The following are the steps and technologies to implement network status monitoring:
1. Obtain the ConnectivityManager Service
First, obtain the ConnectivityManager service to check network connection status.
javaConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
2. Register a Listener for Network Status Changes
Starting from Android N (API 24), it is recommended to use NetworkCallback for monitoring network status changes.
javaNetworkRequest.Builder builder = new NetworkRequest.Builder(); connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { // Callback when network is available Log.i("NetworkCallback", "Network connected"); } @Override public void onLost(Network network) { // Callback when network is unavailable Log.i("NetworkCallback", "Network disconnected"); } });
3. Check the Current Network Status
Sometimes, it is necessary to actively check the current network status. You can use the following method:
javaNetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { // Network connected } else { // Network disconnected }
4. Handle Permission Issues
Starting from Android 6.0 (API 23), dynamically requesting the ACCESS_NETWORK_STATE permission is required for monitoring network status.
Add to AndroidManifest.xml:
xml<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
At runtime, check and request this permission:
javaif (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) { // Request permission ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.ACCESS_NETWORK_STATE}, MY_PERMISSIONS_REQUEST_ACCESS_NETWORK); }
5. Adapt to Different Android Versions
Given the continuous updates of Android's API, ensuring code compatibility across different Android versions is crucial. For example, verify the Android version before using NetworkCallback:
javaif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { connectivityManager.registerDefaultNetworkCallback(networkCallback); } else { // For Android versions below N, use the older API to monitor network changes }
Practical Application Example
In a previous project, we required specific data synchronization upon network status changes. By using NetworkCallback, we monitored network changes in real-time. Upon detecting network reconnection, the application automatically resynced failed tasks, ensuring timely data updates and stable operation.
In summary, by following these steps and technologies, we can effectively monitor network connection status in Android applications, ensuring adaptability and stability across different network environments.