Android O与WiFi同行发现有关

时间:2017-09-07 13:28:11

标签: android-wifi wifi-direct service-discovery wifip2p android-8.0-oreo

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

我的发展环境如下: -

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的{​​{1}}上的P2P对等列表始终为空。 其他三个设备始终发现彼此以及其他各种设备 我的办公室周围,比如三星电视和我的同事个人电话等。

我唯一能想到的是Android 8.0.0的某些东西阻止了P2P同伴被发现。 我无法在"什么是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

我注意到的奇怪之处在于,当我试图保持WiFi" stack"使用Android O唤醒 我的申请完全停止了工作。更进一步,我不得不关闭所有设备,并在我删除后重新启动它们 相关的WiFiLock代码。是的...我确实添加了使用权限android.net.wifi.WifiManager.WifiLock

更新 - 0001

奇怪的是,当我在广播接收器中注销可用于PEER_CHANGED的额外内容时,我可以看到当Android O Pixel XL发现我的Nexus时所列出的可用对等点

android:name="android.permission.WAKE_LOCK"

然而,当我接下来打电话给requestPeers时,我总是收到一个空的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

WifiP2pDeviceList

我是否应该使用传递的额外费用case WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION: Log.d(TAG, "onReceive: WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION"); mWiFiPeer2PeerCommander.requestPeers(mWifiP2pManager, mWifiP2pManagerChannel); break; 来打扰WifiP2pDeviceList

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。在我的nexus 5x现在也是Android O. 而且我也总是有一个空的WifiP2pDeviceList。 我认为它在Android 6上分配(?)类似的问题 SCAN_RESULTS_AVAILABLE_ACTION return empty list in Android 6.0

对我有用......

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

对其进行了修复

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

第2步:在活动中动态请求权限。

第3步:现在扫描WIFI对等体。它会出现。

荣誉!