要检测手机是否通过有线连接上网,可以通过Android的`ConnectivityManager`类检查网络状态。以下是具体方法:
一、核心方法:`isConnectedOrConnecting()`
该方法用于判断设备是否已连接到网络(包括Wi-Fi、移动数据等有线/无线连接)。
```java
public class NetworkChecker {
public static boolean isNetworkConnected(Context context) {
if (context == null) {
return false;
}
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return false;
}
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnectedOrConnecting();
}
}
```
二、注意事项
权限设置
需在`AndroidManifest.xml`中申请网络状态权限:
```xml
```
对于Android 6.0及以上版本,还需在运行时动态申请权限。
网络类型判断
若需区分Wi-Fi和移动数据,可使用`getNetworkType()`方法:
```java
int networkType = networkInfo.getType();
if (networkType == ConnectivityManager.TYPE_WIFI) {
// 已连接Wi-Fi
} else if (networkType == ConnectivityManager.TYPE_MOBILE) {
// 已连接移动数据
}
```
兼容性处理
`getActiveNetworkInfo()`在API 29(Android 10)后已被弃用,建议使用`getNetwork()`方法替代:
```java
Network network = connectivityManager.getActiveNetwork();
return network != null;
```
三、完整示例
```java
public class NetworkStatus {
public static void checkNetwork(Context context) {
if (!isNetworkConnected(context)) {
Log.d("NetworkStatus", "无网络连接");
return;
}
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
Network network = cm.getActiveNetwork();
if (network == null) {
Log.d("NetworkStatus", "未知网络状态");
return;
}
String typeName = cm.getNetworkTypeName(network);
Log.d("NetworkStatus", "当前连接:" + typeName);
}
private static boolean isNetworkConnected(Context context) {
if (context == null) return false;
return context.getNetworkInfo(ConnectivityManager.CONNECTIVITY_SERVICE) != null
&& context.getNetworkInfo(ConnectivityManager.CONNECTIVITY_SERVICE).isConnectedOrConnecting();
}
}
```
通过上述方法,可准确判断手机是否通过有线或无线方式连接到网络,并根据需求进一步处理不同网络类型。