Я протестировал эту библиотеку на Android 9 и 8, она работает. После andro10 я тестировал тот же код, но в методе discoverypeers возвращала ошибку 0. Код записан в Kotlin, но в Java есть та же проблема. Если вы хотите увидеть ошибку, напечатайте reasonCode (метод onfailure). Я использовал там разрешения: ACCESS_COARSE_LOCATION, ACCESS_NETWORK_STATE, INTE RNET, CHANGE_NETWORK_STATE
package com.example.prova
import android.content.Context
import android.content.IntentFilter
import android.net.wifi.p2p.WifiP2pManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
private val intentFilter = IntentFilter()
val manager: WifiP2pManager? by lazy(LazyThreadSafetyMode.NONE) {
getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager?
}
var mChannel: WifiP2pManager.Channel? = null
var receiver: wifiBroadcastReceiver? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
mChannel = manager?.initialize(this, mainLooper, null)
mChannel?.also { channel ->
receiver = wifiBroadcastReceiver(manager, channel, this)
}
val intentFilter = IntentFilter().apply {
addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION)
addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION)
addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)
addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION)
}
discover()
}
override fun onResume() {
super.onResume()
registerReceiver(receiver, intentFilter)
}
/* unregister the broadcast receiver */
override fun onPause() {
super.onPause()
unregisterReceiver(receiver)
}
fun discover(){
manager?.discoverPeers(mChannel, object : WifiP2pManager.ActionListener {
override fun onSuccess() {
println("work")
return
}
override fun onFailure(reasonCode: Int) {
discover()
println("not work")
}
})
}
}
package com.example.prova
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.wifi.p2p.WifiP2pManager
class wifiBroadcastReceiver(manager: WifiP2pManager?, channel: WifiP2pManager.Channel, mainActivity:
MainActivity) : BroadcastReceiver() {
private var mManager: WifiP2pManager? = null
private var mChannel: WifiP2pManager.Channel? = null
private var mActivity: MainActivity? = null
fun WiFiDirectBroadcastReceiver(mManager: WifiP2pManager?, mChannel: WifiP2pManager.Channel?,
mActivity: MainActivity?) {
this.mManager = mManager
this.mActivity = mActivity
this.mChannel = mChannel
}
override fun onReceive(context: Context, intent: Intent) {
when(intent.action) {
WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION -> {
// Determine if Wifi P2P mode is enabled or not, alert
// the Activity.
val state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1)
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED){
println("ok")
}
}
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION -> {
println("ok")
}
WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION -> {
// Connection state changed! We should probably do something about
// that.
}
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION -> {
}
}
}
}