Как решить обнаружить P2P на Android 10? - PullRequest
0 голосов
/ 30 марта 2020

Я протестировал эту библиотеку на 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 -> {
        }
    }
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...