私はサービス発見とP2Pピア発見/接続にWiFi(直接)を採用したAndroidアプリケーションを開発しています。次のようにWiFiピア発見に関するAndroid Oの問題
マイ開発envirommentは次のとおりです。 -
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
サービス検出4つのデバイスすべてでうまく動作します。
Pixel XL
Android 8.0.0
を実行している場合、P2Pピアリストは常に空です。 他の3つのデバイスは、一貫してお互いを発見し、私のオフィスの周りのその他のデバイス などを発見します。サムスンのテレビや私の同僚の携帯電話など。
唯一のことは、約Android O
は、P2Pのピアを発見することを禁止していることです。 原因を特定するために「What's New In Android O」に何も表示されません
Android O
でこの動作を見たことがありますか?私は間違って何をしていますか?私は何が欠けていますか?
私は自分のアプリケーションを基づか午前のコード私が気づいたことを奇妙な何かが私はandroid.net.wifi.WifiManager.WifiLock
を使用して目を覚ましWiFiの「スタック」を維持しようとしたときにということでしたここ
https://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html https://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html
を発見されます私のアプリケーションは完全に動作しなくなりました。 WiFiLockコードに関連付けられた を削除した後は、さらにすべてのデバイスの電源を切って再起動しなければなりませんでした。そしてはい...私はuse-permission android:name="android.permission.WAKE_LOCK"
を追加しました。
UPDATE -
0001いただきました奇数私はPEER_CHANGEDのための私の放送受信機で利用可能エキストラをログアウト時にAndroidのOピクセルXLは私のネクサス
を発見したときに私はここに示したように記載されている利用可能ピアを見ることができるということです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;
アム私はrequestPeers
を呼び出すために気にしないで渡されたエクストラからWifiP2pDeviceList
を使用することになって?