Hec*_*tor 6 service-discovery android-wifi wifi-direct 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
Run Code Online (Sandbox Code Playgroud)
我的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'
})
}
Run Code Online (Sandbox Code Playgroud)
我正在测试的设备包括: -
Nexus 7 - Android 6.0.1
Nexus 9 - Android 7.1.1
Samsung Tablet - Android 4.4.1
Pixel - Android 8.0.0
Run Code Online (Sandbox Code Playgroud)
服务发现在所有四个设备上都能正常运行.
但是,P2P对等列表在Pixel XL运行时始终为空Android 8.0.0.其他三个设备不断发现彼此以及我办公室周围的其他杂项设备,例如三星电视和我的同事个人电话等.
我唯一能想到的是,有些事情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
奇怪的是,当我在广播接收器中注销可用于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
Run Code Online (Sandbox Code Playgroud)
然而,当我随后打电话给requestPeers时,我总是收到一个空的WifiP2pDeviceList?
case WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION:
Log.d(TAG, "onReceive: WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION");
mWiFiPeer2PeerCommander.requestPeers(mWifiP2pManager, mWifiP2pManagerChannel);
break;
Run Code Online (Sandbox Code Playgroud)
我是否应该使用WifiP2pDeviceList从传递的Extra而不打扰来打电话requestPeers?
小智 2
我有同样的问题。在我的 Nexus 5x 上现在也有 Android O。而且我总是得到一个空的 WifiP2pDeviceList。我认为它在 Android 6 上分配(?)有类似的问题 SCAN_RESULTS_AVAILABLE_ACTION 在 Android 6.0 中返回空列表
这个对我有用...
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |