Android 13 (API 수준 33) 이상을 타겟팅하고 Wi-Fi 연결을 관리하는 앱은 NEARBY_WIFI_DEVICES
런타임 권한을 요청해야 합니다. 이 권한을 사용하면 앱의 근처 Wi-Fi 기기 액세스를 더 쉽게 지원할 수 있습니다. 이전 버전의 Android에서는 이러한 앱이 대신 ACCESS_FINE_LOCATION
권한을 선언해야 했습니다.
권한은 근처 기기 그룹에 속해 있습니다
NEARBY_WIFI_DEVICES
권한은 근처 기기 권한 그룹의 일부입니다. Android 12(API 수준 31)에서 추가된 이 그룹에는 블루투스와 초광대역 관련 권한도 포함되어 있습니다. 이 권한 그룹에서 권한 조합을 요청하면 시스템은 단일 런타임 대화상자를 표시하고 사용자에게 앱의 근처 기기 액세스를 승인하도록 요청합니다.
시스템 설정에서 사용자는 근처 기기 권한을 그룹으로 사용 설정하거나 사용 중지해야 합니다. 예를 들어 사용자는 Wi-Fi 액세스를 사용 중지할 수 없지만 특정 앱에 블루투스 액세스는 사용 설정된 상태로 유지할 수 있습니다.
앱이 물리적 위치를 얻지 않는다고 강력하게 어설션합니다
Android 13 이상을 타겟팅할 때 앱이 Wi-Fi API에서 위치 정보를 가져오는지 고려합니다. 그렇지 않다면 이를 강력하게 어설션해야 합니다. 이 어설션을 만들려면 다음 코드 스니펫과 같이 앱의 매니페스트 파일에서 usesPermissionFlags
속성을 neverForLocation
으로 설정합니다. 이 프로세스는 블루투스 기기 정보가 위치에 사용되지 않는다고 어설션할 때 실행하는 프로세스와 유사합니다.
<manifest ...> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application ...> ... </application> </manifest>
이전 버전 및 일부 API에 위치 정보 액세스 권한 필요
일부 Wi-Fi API는 앱이 Android 13 이상을 타겟팅하는 경우에도 ACCESS_FINE_LOCATION
권한이 필요합니다. 예를 들어 WifiManager
클래스의 다음 메서드가 있습니다.
또한 NEARBY_WIFI_DEVICES
권한은 Android 13 이상에서만 사용할 수 있으므로 앱에서 이전 버전과의 호환성을 제공하려면 ACCESS_FINE_LOCATION
선언을 유지해야 합니다. 그러나 앱이 정확한 위치 정보를 사용하지 않는 한 다음 코드 스니펫과 같이 이 권한의 최대 SDK 버전을 32
로 설정할 수 있습니다.
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
권한이 필요한 API 확인
앱이 Android 13 이상을 타겟팅한다면 NEARBY_WIFI_DEVICES
권한을 선언하여 다음 Wi-Fi API를 호출해야 합니다.
WifiManager
WifiAwareManager
WifiAwareSession
WifiP2pManager
WifiRttManager
Wi-Fi 액세스 워크플로
그림 1은 Android 13 이상을 타겟팅하는 앱의 경우 Android 13 이상을 실행하는 기기의 Wi-Fi 액세스 워크플로를 보여줍니다. 앱이 Wi-Fi 기기 정보에서 물리적 위치를 얻지 않는다고 어설션하는 한 ACCESS_FINE_LOCATION
권한을 더 이상 선언할 필요가 없습니다.
그림 2는 12L 이하를 실행하는 기기의 Wi-Fi 액세스 워크플로를 보여줍니다. ACCESS_FINE_LOCATION
권한 의존도를 확인합니다.