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

Android平台WiFi-Direct可用示例代码及功能有效性咨询

WiFi Direct在Android 10/12上的可用性与解决方案

一、WiFi Direct并未被废弃

Android官方并未废弃WiFi Direct功能,从Android 10到最新的Android 14系统文档中,依然保留了完整的WiFi Direct API说明。你遇到的功能异常,大概率是厂商系统定制限制或权限/代码适配问题导致的。

二、问题排查关键点

  • 权限缺失:
    Android 10及以上需要ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION运行时权限;Android 12+新增NEARBY_WIFI_DEVICES权限,必须在Manifest中声明,且扫描设备时需配合位置权限使用(部分厂商要求必须开启系统定位服务)。
  • 厂商定制限制:
    三星、OPPO等品牌的部分机型会对WiFi Direct做功能阉割,比如默认禁用群组创建、强制要求开启定位才能扫描设备,甚至直接隐藏相关系统接口。
  • 代码适配漏洞:
    你使用的修改版代码可能未适配高版本系统的权限逻辑,或者广播接收器注册、API调用流程存在错误。

三、可用的Kotlin基础实现代码

1. Manifest权限配置

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:minSdkVersion="31" />
<uses-feature android:name="android.hardware.wifi.direct" android:required="true" />

2. 核心功能代码

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.wifi.p2p.WifiP2pManager
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class WiFiDirectDemo : AppCompatActivity() {
    private lateinit var wifiP2pManager: WifiP2pManager
    private lateinit var p2pChannel: WifiP2pManager.Channel
    private val p2pReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            when (intent?.action) {
                // WiFi Direct状态变更
                WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION -> {
                    val state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1)
                    if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
                        // WiFi Direct已激活
                    }
                }
                // 对等设备列表更新
                WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION -> {
                    wifiP2pManager.requestPeers(p2pChannel) { peerList ->
                        // 处理扫描到的设备列表
                    }
                }
                // 连接状态变更
                WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION -> {
                    // 处理连接/断开事件
                }
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 初始化WiFi Direct管理器
        wifiP2pManager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
        p2pChannel = wifiP2pManager.initialize(this, mainLooper, null)

        // 注册广播接收器
        val filter = IntentFilter().apply {
            addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION)
            addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION)
            addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)
        }
        registerReceiver(p2pReceiver, filter)
    }

    // 启动设备扫描
    fun startPeerDiscovery() {
        wifiP2pManager.discoverPeers(p2pChannel, object : WifiP2pManager.ActionListener {
            override fun onSuccess() {
                // 扫描启动成功
            }

            override fun onFailure(reasonCode: Int) {
                // 扫描失败,根据code排查:1=未支持,2=WiFi关闭,3=内部错误
            }
        })
    }

    // 创建WiFi Direct群组
    fun createP2pGroup() {
        wifiP2pManager.createGroup(p2pChannel, object : WifiP2pManager.ActionListener {
            override fun onSuccess() {
                // 群组创建成功
            }

            override fun onFailure(reasonCode: Int) {
                // 群组创建失败
            }
        })
    }

    override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(p2pReceiver)
    }
}

四、热点替代方案的可行性

如果WiFi Direct在目标机型上兼容性极差,用热点+Socket通信确实是更稳定的选择:

  • 优势:几乎所有Android设备都支持热点功能,API适配成本低,功能稳定性远高于WiFi Direct
  • 局限:Android 10+需要动态申请ACCESS_FINE_LOCATION和CHANGE_WIFI_STATE权限;部分厂商限制代码自动开启热点,需要用户手动操作;同一热点最多支持10-15台设备连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:20:22