이제 피어 목록을 가져오고 처리하는 코드를 작성합니다. 먼저 WiFiP2pManager.PeerListListener 인터페이스를 구현하여 Wi-Fi P2P가 감지한 피어에 대한 정보를 제공합니다. 또한 이 정보를 통해 앱에서 피어가 네트워크에 참여하거나 나갈 시기를 결정할 수 있습니다. 다음 코드 코드 조각은 피어와 관련된 이러한 작업을 보여 줍니다. 추상적인 수준에서 네트워크 연결과 관련된 작업을 수행하려면 ConnectivityManager를 사용합니다. WifiManager API에서 제공하는 Wi-Fi 검색 기능을 사용하여 장치에서 볼 수 있는 Wi-Fi 액세스 포인트 목록을 얻을 수 있습니다. 이 Wi-Fi 잠금 모드에서는 Wi-Fi가 활성 상태로 유지되지만 지원되는 유일한 작업은 검사 개시 및 검사 결과 의 후속 보고입니다. 기억된 액세스 포인트에 자동으로 연결하려는 시도는 없으며 기억된 액세스 포인트를 찾기 위해 정기적인 검사가 자동으로 수행되지도 않습니다. 이 모드에서 응용 프로그램에서 검사를 명시적으로 요청해야 합니다. 이제 시스템의 Wi-Fi P2P 상태에 대한 변경 내용을 듣는 데 사용할 새 BroadcastReceiver 클래스를 만듭니다.

onReceive() 메서드에서 위에 나열된 각 P2P 상태 변경을 처리하는 조건을 추가합니다. onCreate() 메서드의 끝에서 WifiP2pManager의 인스턴스를 가져옵니다 및 initialize() 메서드를 호출합니다. 이 메서드는 WifiP2pManager.Channel 개체를 반환하며, 나중에 앱을 Wi-Fi P2P 프레임워크에 연결하는 데 사용합니다. 액세스 포인트에 대한 연결을 설정하는 상태가 변경되었음을 나타내는 브로드캐스트 의도 작업입니다. 하나 더 새로운 SupplicantState를 제공합니다. 신청자 상태는 Wi-Fi에 특정하며 전체 연결 상태에 관심이 있는 경우 일반적으로 가장 유용한 것은 아닙니다. 장치에서 Wi-Fi 기능을 관리하는 클래스를 제공합니다. 안드로이드 응용 프로그램에서 Wi-Fi 기능을 사용하려면 매니페스트 파일에 CHANGE_WIFI_STATE, ACCESS_WIFI_STATE 및 인터넷과 같은 여러 권한을 추가해야 합니다. 일반적으로 Wi-Fi API를 사용하여 안드로이드 애플리케이션에서 Wi-Fi 연결의 모든 측면을 관리할 수 있습니다. Wi-Fi 피어 투 피어(P2P) API를 사용하면 응용 프로그램이 네트워크 나 핫스팟에 연결할 필요 없이 가까운 장치에 연결할 수 있습니다. 앱이 안전한 근거리 네트워크의 일부로 설계된 경우 Wi-Fi Direct는 다음과 같은 이유로 기존의 Wi-Fi 임시 네트워킹보다 더 적합한 옵션입니다. (그리고 이제 Wi-Fi 작업을 수행 할 수 있습니다) 또는 신청자에 대한 연결이 손실되었습니다.

추가 된 부울로 연결 상태를 제공 합니다., 참 의미 CONNECTED. 활동 작업: Wi-Fi를 끄고도 사용자가 스캔을 사용할 수 있도록 허용하는 시스템 활동을 표시합니다. 이 Wi-Fi 잠금 모드에서는 Wi-Fi가 절전 모드로 이동하지 않습니다. 이렇게 하면 패킷 대기 시간이 짧은 환경에서 작동할 수 있습니다. 잠금장치는 액세스 포인트에 연결된 경우에만 활성화됩니다. 장치 화면이 꺼져 있거나 획득 응용 프로그램이 백그라운드에서 실행 중인 경우에도 잠금이 활성화됩니다. 이 모드는 더 많은 전력을 소비하므로 이 절충안이 필요한 경우에만 사용해야 합니다. WiFi API에 중점을 두기 때문에 자습서에서 권한을 관리하지 않습니다. 그러나 Google Play 스토어에 게시되는 것을 목표로하는 안드로이드 응용 프로그램의 경우 Android SDK 27을 대상으로하고 안드로이드 권한을 관리해야합니다. WifiManager 방법을 사용 하 여 getScanResults(), 우리는 사용 가능한 Wi-Fi 네트워크 세부 사항의 목록을 얻을 수 있습니다. 그룹의 각 장치가 Wi-Fi를 직접 지원하는 경우 연결할 때 그룹의 암호를 명시적으로 요청할 필요가 없습니다.

그러나 Wi-Fi Direct를 지원하지 않는 장치가 그룹에 가입하도록 허용하려면 다음 코드 스니펫과 같이 requestGroupInfo()를 호출하여 이 암호를 검색해야 합니다. 메서드가 그룹을 만들고 그룹 소유자를 자동으로 선택하기 때문입니다.

Scroll Up