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

Android 8.0(Oreo)设备Wifi p2p discoverPeers()无法发现对等设备求助

解决Android 8.0设备无法发现低版本Wifi P2P设备的问题

我之前处理过类似的Wifi P2P跨版本兼容性问题,给你几个针对性的排查和解决方向:

  • 位置权限与服务的强制要求
    Android 8.0对Wifi P2P的权限管控更严格,不仅要在Manifest中声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION,还必须在运行时主动申请并获得用户授权。另外,一加的OxygenOS这类定制ROM通常要求必须开启系统位置服务,否则Wifi P2P扫描会静默失败——你可以先检查OnePlus 5的位置服务是否开启,同时确认应用已经拿到了位置权限。

  • 动态注册Wifi P2P广播接收器
    Android 8.0开始限制了隐式广播的静态注册,原来在Manifest里注册的WIFI_P2P_PEERS_CHANGED_ACTION等关键广播接收器可能无法正常触发。你需要改成在代码里动态注册:

    WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
    WifiP2pManager.Channel channel = manager.initialize(this, getMainLooper(), null);
    BroadcastReceiver receiver = new WifiP2pBroadcastReceiver(manager, channel, this);
    IntentFilter filter = new IntentFilter();
    filter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
    filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
    filter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
    registerReceiver(receiver, filter);
    

    记得在Activity销毁时调用unregisterReceiver()避免内存泄漏。

  • 调整扫描触发逻辑
    Android 8.0对Wifi P2P扫描的频率有限制,连续调用discoverPeers()可能会被系统限流。建议扫描前先通过isWifiP2pEnabled()确认模块已启用,且每次扫描间隔至少保持2-3秒。另外,不要在调用discoverPeers()后立即获取对等设备列表,要等WIFI_P2P_PEERS_CHANGED_ACTION广播触发后,再调用requestPeers()获取最新列表。

  • 排查定制ROM的兼容性问题
    一加的OxygenOS对原生Android的Wifi P2P可能有定制修改,你可以用一台原生Android 8.0设备测试同样的代码,看是否能正常发现低版本设备。如果原生设备正常,那大概率是一加ROM的问题,可以去一加官方论坛看看有没有相关解决方案,或者把系统更到最新版本。另外,关闭OnePlus 5的蓝牙、热点等其他无线功能,避免干扰Wifi P2P扫描。

  • 通过系统日志定位问题
    抓取OnePlus 5的Wifi P2P相关日志能快速定位根源,用以下adb命令过滤日志:

    adb logcat -s WifiP2pService WifiP2pManager
    

    看看扫描过程中有没有Permission denied、Scan request ignored这类错误提示,它们会直接指向问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:32:05