在一些 Android 设备上同时具有以太网和Wifi网络连接
我们可以使用 ConnectivityManager 类来判断设备的网络状态。以下是一个 Kotlin 示例,说明了如何检查网络连接状态以及连接类型(例如 Wi-Fi 或移动数据):
首先,确保在我们的 AndroidManifest.xml 文件中添加网络状态访问权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
/*** 判断移动网络是否连接成功** @param context* @return*/fun isNetContected(context: Context): Boolean {val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManagerval 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 ConnectivityManagerval info = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI)if (info != null && info.isConnected) {return true}return false}
在Android提供的"设置"菜单中有"以太网连接选项",从中可以配置设备的以太网连接。
为了检查以太网连接状态,我们读取系统文件" / sys / class / net / eth0",该文件可以返回正确的以太网状态
//检查以太网状态
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;
}