在 Android 下通过 JNI 进行 C 网络编程时,需要获知 Wi-Fi 的网络接口名,如“wlan0”(有的系统中也可能是 “eth0”)。如果在程序中固定使用 “wlan0” 势必会造成兼容性问题,例如在某些 Wi-Fi 网络接口名为 “eth0” 的手机上会执行失败。
那么怎样才能获取到 Wi-Fi 接口名呢? 原来在 Android 系统中, “wlan0” 保存在系统属性里。Android 系统属性由 key 和 value 构成,结构简单。在终端敲入命令 getprop 就可以获取到所有的系统属性值,如下面两图所示:
从上面第二副图可知,本系统中 Wi-Fi 网络接口属性的 value 为 “wlan0”,key 为 “wifi.interface”。
那么如何从代码中获取到 Wi-Fi 的网络接口名呢?原来在Android 中早已提供了系统函数来实现该功能,其原型为:
int __system_property_get(const char *name, char *value);
其中,name 指向 key 字符串,value 指向用于保存获取到的属性值的用户存储空间。
当以 “wifi.interface” 作为 key 值来调用上述函数时,value 中的值即为Wi-Fi 接口名 “wlan0”。
当然该函数还可用于获取系统中的其它属性值。
参考:http://blog.csdn.net/livingpark/article/details/7454063