You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin开发Android WiFi设备APP:按IP识别设备类型并显示对应图标

实现WiFi设备类型图标匹配方案

核心思路

要给每个IP对应的设备显示专属图标,核心是先识别设备类型,再绑定对应图标,具体分以下几步落地:

1. 收集设备识别依据

你已经能获取IP列表,接下来需要补充设备的额外信息来判断类型:

  • MAC地址提取:通过读取Android系统的/proc/net/arp文件,或者用NetworkInterface API获取IP对应的MAC地址。MAC地址的前6位(冒号分隔的前3段)是厂商OUI码,不同品牌的设备OUI码固定,比如苹果设备常见OUI为00:1A:79、00:0C:29,路由器常见OUI为C8:3A:35等。
  • 主机名解析(可选):对IP做DNS反向解析,若主机名包含android、iphone、router这类关键词,可直接判断设备类型。
  • 端口扫描(可选):后台异步扫描常见服务端口,比如手机常用的5555(ADB)、电脑常用的22(SSH),辅助判断设备类型(注意扫描会耗时,需控制频率)。

2. 编写设备类型判断逻辑

基于收集到的信息,编写类型匹配规则:

// 定义设备类型枚举
enum class DeviceType {
    MOBILE, PC, ROUTER, UNKNOWN
}

fun judgeDeviceType(mac: String?, hostname: String?): DeviceType {
    // 优先通过MAC的OUI码判断
    mac?.let {
        val oui = it.substring(0, 8).uppercase()
        // 可扩展更多厂商OUI码
        val mobileOuis = setOf("00:1A:79", "00:0C:29", "90:E2:BA")
        val routerOuis = setOf("C8:3A:35", "00:18:E7")
        val pcOuis = setOf("00:1D:09", "00:24:9B")
        
        return when (oui) {
            in mobileOuis -> DeviceType.MOBILE
            in routerOuis -> DeviceType.ROUTER
            in pcOuis -> DeviceType.PC
            else -> DeviceType.UNKNOWN
        }
    }
    // 其次通过主机名关键词判断
    hostname?.let {
        return when {
            it.contains("android", ignoreCase = true) || it.contains("iphone", ignoreCase = true) -> DeviceType.MOBILE
            it.contains("pc", ignoreCase = true) || it.contains("laptop", ignoreCase = true) -> DeviceType.PC
            it.contains("router", ignoreCase = true) || it.contains("gateway", ignoreCase = true) -> DeviceType.ROUTER
            else -> DeviceType.UNKNOWN
        }
    }
    return DeviceType.UNKNOWN
}

3. 列表中绑定图标

在RecyclerView的Adapter中,根据设备类型匹配对应图标资源:

override fun onBindViewHolder(holder: DeviceViewHolder, position: Int) {
    val device = deviceList[position]
    holder.ipTextView.text = device.ipAddress
    // 根据设备类型设置图标
    val iconResId = when (device.type) {
        DeviceType.MOBILE -> R.drawable.ic_device_mobile
        DeviceType.PC -> R.drawable.ic_device_pc
        DeviceType.ROUTER -> R.drawable.ic_device_router
        DeviceType.UNKNOWN -> R.drawable.ic_device_unknown
    }
    holder.deviceIconImageView.setImageResource(iconResId)
}

4. 优化建议

  • OUI数据库本地化:把常用厂商的OUI码整理成本地JSON或资源文件,避免网络请求,提升识别速度。
  • 异步处理:MAC查询、端口扫描等操作放在Coroutines后台线程执行,避免阻塞UI。
  • 结果缓存:将已识别的IP-设备类型对应关系缓存到SharedPreferences,下次启动APP直接复用,减少重复识别操作。

内容的提问来源于stack exchange,提问作者mohamed hossam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:57:06