Android WiFi Peer Discovery 的问题

Android O issues with WiFi Peer Discovery

我正在开发一个 Android 应用程序,它使用 WiFi(直接)进行服务发现和 P2P 对等 discovery/connection。

我的开发环境如下:-

Android Studio 3.0 Beta 4
Build #AI-171.4304935, built on August 29, 2017
JRE: 1.8.0_152-release-915-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.11.6

我的 Gradle 构建:-

apply plugin: 'com.android.application'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "com.research.wifi_direct"

        minSdkVersion 19
        targetSdkVersion 26

        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    buildTypes {

        debug {
            buildConfigField "String", "INSTANCE_NAME", "\"_vascodagama\""
            buildConfigField "String", "SERVICE_TYPE", "\"_presence._tcp\""
        }

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.0.2'
    implementation 'com.android.support:recyclerview-v7:26.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'

    implementation 'com.yarolegovich:lovely-dialog:1.0.7'

    implementation 'io.realm:android-adapters:2.1.0'


    testImplementation 'junit:junit:4.12'

    androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
}

我正在测试的设备包括:-

Nexus 7 - Android 6.0.1
Nexus 9 - Android 7.1.1
Samsung Tablet - Android 4.4.1
Pixel - Android 8.0.0 

服务发现在所有四台设备上工作正常。

但是 Pixel XL 运行 Android 8.0.0 上的 P2P 点列表总是空的。 其他三个设备始终发现彼此以及其他杂项设备 在我的办公室周围,例如例如三星电视和我同事的个人电话等..

我唯一能想到的是 Android O 有一些东西阻止了 P2P 节点被发现。 我在 "Whats New In Android O" 中看不到任何东西来识别罪魁祸首

有人在 Android O 上看到过这种行为吗?我究竟做错了什么?我错过了什么?

我的应用程序所基于的代码可以在这里找到

https://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html https://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html

我注意到的一件奇怪的事情是,当我试图使用 android.net.wifi.WifiManager.WifiLock 保持 WiFi "stack" 唤醒时 我的应用程序完全停止工作。此外,我必须关闭所有设备的电源,并在移除设备后重新启动它们 关联的 WiFiLock 代码。是的...我确实添加了使用权限 android:name="android.permission.WAKE_LOCK".

更新 - 0001

奇怪的是,当我为 PEER_CHANGED 注销我的广播接收器中可用的附加功能时,当 Android O Pixel XL 发现我的 Nexus 时,我可以看到可用的对等点列出如下所示

WiFiDirectBroadcastRcvr: android.net.wifi.p2p.PEERS_CHANGED<<<<<EXTRA DATA :: ------------------------START
WiFiDirectBroadcastRcvr: EXTRA DATA :: wifiP2pDeviceList 
                         Device: Nexus 7
                          deviceAddress: da:50:e6:7c:56:4e
                          primary type: 000A0050F2040005
                          secondary type: null
                          wps: 392
                          grpcapab: 0
                          devcapab: 37
                          status: 3
                          wfdInfo: WFD enabled: trueWFD DeviceInfo: 0
                          WFD CtrlPort: 0
                          WFD MaxThroughput: 0 (android.net.wifi.p2p.WifiP2pDeviceList)
WiFiDirectBroadcastRcvr: EXTRA DATA :: ------------------------FINISH

然而,当我随后调用 requestPeers 时,我总是收到一个空 WifiP2pDeviceList?

case WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION:
                Log.d(TAG, "onReceive: WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION");
                mWiFiPeer2PeerCommander.requestPeers(mWifiP2pManager, mWifiP2pManagerChannel);
                break;

我是否应该使用传递的 Extra 中的 WifiP2pDeviceList 而不必费心调用 requestPeers

我遇到了同样的问题。在我的 nexus 5x 上现在也 Android O。 而且我也总是得到一个空的 WifiP2pDeviceList。 我认为它在 Android 6 上有类似问题的赋值 (?)

对我有用...

设置targetSdkVersion <= 25可以解决这个问题,但我不知道为什么。

我遇到了类似的问题。我通过添加

修复了它

第 1 步:在清单中添加位置权限。

第 2 步:在 activity.

中动态请求权限

第 3 步:现在扫描 WIFI 对等点。会出现的。

荣誉!!!