Android 롤리팝까지 잘 사용하던 BLE 및 Wi-Fi SW가 갑자기 동작하지 않기 시작했습니다.
BLE scan을 하거나 Wi-Fi Scan을 했을 때, Callback은 잘 되더라도 결과가 올라오지 않는 문제가 있습니다.
logcat으로 출력로그를 면밀히 살펴보면 뭔가 권한 이슈가 생겼음을 짐작할 수 있습니다.
맞습니다.
마시멜로로 오면서 권한 체크가 강화되면서 run time에 user로부터 권한을 받는 절차를 추가로 받아야 합니다.
다음의 링크를 보시면 쉽게 이해할 수 있을 겁니다.
빨리 수정을 하고 싶으시다면 2,3번의 코드를 Activity Class를 사용하는 곳에 넣으시면 BLE, Wi-Fi Scan 이 잘되는 것을 보실 수 있을겁니다.
1. 아래 내용에 대한 Ref : https://developer.android.com/intl/ko/training/permissions/declaring.html https://developer.android.com/intl/ko/training/permissions/requesting.html
2. Permissions in AndroidManifest file <manifest xmlns:android="http://schemas.android.com/apk/res/android" ※ ACCESS_COARSE_LOCATION 대신 ACCESS_FINE_LOCATION 을 사용해도 무방합니다.
3. Code Snippet 3.1 권한을 갖고 있는지 점검하는 코드 // Assume thisActivity is the current activity PackageManager.PERMISSION_GRANTED : 권한 갖고 있으니 scan 이 실패하지 않음 PERMISSION_DENIED : 권한이 현재 없으니 사용자로부터 권한을 획득해야 함.
3.2 권한을 갖고 있지 않다면 요청하는 코드
// No explanation needed, we can request the permission. ※ MY_PERMISSIONS_REQUEST_READ_CONTACTS 값은 추후 onRequestPermissionsResult(...) 가 호출될 때 requestCode값입니다. 다음의 코드를 참조하시면 됩니다.
3.3 권한요청에 대한 사용자의 응답 결과 처리 @Override
참고로 1번의 링크에서는 SMS 나 WRITE_CALENDAR 권한을 통해 설명하고 있습니다. 여기에서는 Wi-Fi 등에 대한 권한이 필요하므로 ACCESS_COARSE_LOCATION이 사용되었습니다. |