최신 안드로이드 버전에서 WiFi Scan result를 정상적으로 확인하기 위해서는

Location Permission이 있어야 하고

android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION

Location Provider가 켜져 있어야 한다.


하지만 동일한 소스로 Target Sdk Version을 21(Lollipop)으로 설정하고 빌드하면

Oreo 버전의 스마트 폰에서 Location Provider가 꺼져 있더라도 Scan Result를 Access할 수 있다.

또한 현재 연결된 Wifi의 WifiInfo도 정상적으로 Access할 수 있다.

Target Sdk Version을 21(Lollipop)로 빌드한 APK는 Oreo 버전의 스마트폰에서 Permission에 대한 권한 요청을 하지 않는다.



[구글 가이드 참조]

https://developer.android.com/guide/topics/manifest/uses-sdk-element.html?hl=ko

android:targetSdkVersion
애플리케이션의 대상 API 레벨을 지정하는 정수입니다. 설정하지 않을 경우 기본값은 minSdkVersion에 주어진 값과 동일합니다.

이 특성은 개발자가 대상 버전을 테스트했고 시스템이 향후 앱의 대상 버전과의 호환성을 유지하도록 호환성 동작을 활성화해서는 안 됨을 시스템에 알립니다. 여전히 애플리케이션을 이전 버전(minSdkVersion까지)에서 실행할 수 있습니다.

Android는 각 새 버전과 함께 진화하므로 몇몇 동작과 심지어 모양이 변경될 수 있습니다. 그러나 플랫폼의 API 레벨이 앱의 targetSdkVersion이 선언한 버전보다 높은 경우 시스템은 앱이 예상대로 계속 작동하도록 호환성 동작을 활성화할 수 있습니다. 실행 중인 플랫폼의 API 레벨과 일치하는 targetSdkVersion을 지정하여 그러한 호환성 동작을 비활성화할 수 있습니다. 예를 들어, 해당 값을 "11" 이상으로 설정하면 Android 3.0 이상에서 실행 중일 때 시스템이 새 기본 테마(Holo)를 앱에 적용할 수 있으며 대형 화면에서 실행 중일 때 (API 레벨 11에 대한 지원이 대형 화면을 암시적으로 지원하므로) 화면 호환성 모드를 비활성화합니다.

이 특성에 대해 설정한 값에 기반하여 시스템이 활성화할 수 있는 호환성 동작이 많이 있습니다. Build.VERSION_CODES 참조에서 해당 플랫폼 버전별로 이러한 몇몇 동작에 대해 설명합니다.

애플리케이션을 각 Android 릴리스와 함께 유지 관리하려면 최신 API 레벨과 일치하도록 이 특성 값을 높인 후에 해당 플랫폼 버전에서 애플리케이션을 철저히 테스트해야 합니다.

도입: API 레벨 4








+ Recent posts