4

Je développe une application Android qui utilise le WiFi (Direct) pour la découverte de service et la découverte/connexion peer-to-peer P2P.Android O problèmes avec WiFi Peer Discovery

Mon développement enviromment est la suivante: -

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 

Mon Gradle construire: -

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' 
    }) 
} 

Les appareils que je teste, mentionnons les suivants: -

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

La découverte de service fonctionne bien sur les quatre appareils.

Toutefois, la liste des homologues P2P est toujours vide sur le Pixel XL exécutant Android 8.0.0. Les trois autres appareils se découvrent constamment, ainsi que d'autres appareils divers autour de mon bureau, par ex. La seule chose que je peux penser est qu'il ya quelque chose à propos de Android O qui inhibe la découverte de pairs P2P. Je ne vois rien dans le "Quoi de neuf dans Android O" pour identifier le coupable

Quelqu'un at-il vu ce comportement sur Android O? Qu'est-ce que je fais mal? Qu'est-ce que je rate?

Le code Je fonde ma demande sur se trouve ici

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

Quelque chose étrange que j'ai remarqué est que lorsque j'ai essayé de garder la connexion Wi-Fi « pile » veille à l'aide d'un android.net.wifi.WifiManager.WifiLock mon application a cessé de fonctionner complètement. De plus, je devais éteindre tous mes appareils et les redémarrer une fois que j'avais enlevé le code WiFiLock associé. Et oui ... J'ai ajouté add-permission android:name="android.permission.WAKE_LOCK".

MISE À JOUR - 0001

Ce qui est étrange est que lorsque je me connecte les extras disponibles dans mon émission récepteur pour PEER_CHANGED je peux voir les pairs disponibles répertoriés comme indiqué ici lorsque l'Android O Pixel XL a découvert mon 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 

Cependant quand je fais ensuite mon prochain appel à requestPeers je reçois toujours un vide WifiP2pDeviceList?

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

Suis-je censé utiliser le WifiP2pDeviceList du passé supplémentaire une peine de ne pas appeler requestPeers?

Répondre