근처 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 정보에 액세스할 수 있는지 확인하는 플로 차트