在一些 Android 设备上同时具有以太网和Wifi网络连接
我们可以使用 ConnectivityManager 类来判断设备的网络状态。以下是一个 Kotlin 示例,说明了如何检查网络连接状态以及连接类型(例如 Wi-Fi 或移动数据):
代码语言:javascript复制首先,确保在我们的 AndroidManifest.xml 文件中添加网络状态访问权限:
代码语言:javascript复制 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
代码语言:javascript复制/**
* 判断移动网络是否连接成功
*
* @param context
* @return
*/
fun isNetContected(context: Context): Boolean {
val cm = context
.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val info = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
if (cm != null && info != null && info.isConnected) {
return true
}
return false
}
/**
* 判断WIFI是否连接成功
*
* @param context
* @return
*/
fun isWifiContected(context: Context): Boolean {
val cm = context
.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val info = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
if (info != null && info.isConnected) {
return true
}
return false
}
在Android提供的"设置"菜单中有"以太网连接选项",从中可以配置设备的以太网连接。 为了检查以太网连接状态,我们读取系统文件" / sys / class / net / eth0",该文件可以返回正确的以太网状态
代码语言:javascript复制 //检查以太网状态
private boolean checkLan(){
Process p=null;
BufferedReader in=null;
try {
p = Runtime.getRuntime().exec("cat /sys/class/net/eth0/carrier");
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
String value = "";
while ((line = in.readLine()) != null) {
Log.i("tag", "carrier is " line);
if("0".equals(line)){
return false;
}
if("1".equals(line)){
return true;
}
}
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}