근처 Wi-Fi 기기에 액세스할 수 있는 권한 요청

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에 위치 정보 액세스 권한 필요

앱이 Android 13 이상을 타겟팅하는 경우에도 일부 Wi-Fi API에는 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를 호출해야 합니다.

Wi-Fi 액세스 워크플로

그림 1은 Android 13 이상을 타겟팅하는 앱의 경우 Android 13 이상을 실행하는 기기의 Wi-Fi 액세스 워크플로를 보여줍니다. 앱이 Wi-Fi 기기 정보에서 물리적 위치를 얻지 않는다고 어설션하는 한 ACCESS_FINE_LOCATION 권한을 더 이상 선언할 필요가 없습니다.

그림 1. Android 13 (API 수준 33) 이상을 타겟팅하는 앱이 Wi-Fi 정보에 액세스할 수 있는지 판단하는 플로 차트

그림 2는 12L 이하를 실행하는 기기의 Wi-Fi 액세스 워크플로를 보여줍니다. ACCESS_FINE_LOCATION 권한 의존도를 확인합니다.

그림 2. 12L (API 수준 32) 이하를 타겟팅하는 앱이 Wi-Fi 정보에 액세스할 수 있는지 판단하는 플로 차트