Проблемы с Android O с WiFi Peer Discovery

Я занимаюсь разработкой приложения для 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 

Служба обнаружения работает нормально на всех четырех устройствах.

Однако P2P Peers List всегда пуст в Pixel XL Бег Android 8.0.0, Три других устройства постоянно обнаруживают друг друга, а также другие разные устройства в моем офисе, например, телевизор Samsung, телефоны моих коллег и т. Д.

Единственное, о чем я могу думать, это то, что Android O что препятствует обнаружению 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 бодрствующим, используя android.net.wifi.WifiManager.WifiLockмое приложение перестало работать вообще. Более того, мне пришлось отключить все мои устройства и перезапустить их, как только я удалил связанный код WiFiLock. И да... я добавил разрешение на использование android:name="android.permission.WAKE_LOCK",

ОБНОВЛЕНИЕ - 0001

Странно то, что когда я выхожу из дополнений, доступных в моем Broadcast Receiver для 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;

Я должен использовать WifiP2pDeviceList из пропущенного Экстра не позвони requestPeers?

3 ответа

Решение

У меня такая же проблема. На моем nexus 5x теперь также Android O. И у меня тоже всегда есть пустой WifiP2pDeviceList. Я думаю, что это назначить (?) С аналогичной проблемой на Android 6 SCAN_RESULTS_AVAILABLE_ACTION вернуть пустой список в Android 6.0

Меня устраивает...

Установка targetSdkVersion <= 25 может решить эту проблему, но я не знаю почему.

Я сталкивался с подобной проблемой. Я исправил это, добавив

Шаг 1: Добавьте разрешение Location в манифест.

Шаг 2: динамически запрашивайте разрешение в вашей деятельности.

Шаг 3: Теперь сканируйте на наличие WIFI-пиров. Это появится.

Престижность!!!

Другие вопросы по тегам