Bluetooth StartDiscovery() always returns false이미 페어링되어 있는 기기의 경우 잘 불러와지나, 결론)안드로이드 10 이상부터 관련 권한 체크를 필수적으로 해주어야했음. 블루투스 제어시 필요 권한
: location 관련 권한은 왜 필수일까.. [참고]- 안드로이드 스튜디오 - 블루투스 통신 - Error 참고 +++ 추가위치 설정 ON-!! Android를 사용하여 Bluetooth Le Application을 개발할 때 Connection을 위한 Device Scan이 필요하고 이부분을 구현하였으나 정작 Scan list를 불러오지 못하는 경우가 있습니다. 이 부분은 예전에는 문제없었지만 구글의 바뀐 정책으로 인해 몇 가지 추가를 해주어야 합니다. 일단 기존에는 Bluetooth Scan 및 Connection을 위해서는 Manifest에 두 가지 permission만 선언하면 되었습니다. <uses-permission android:name="android.permission.BLUETOOTH"/> 하지만 구글의 바뀐 정책은 추가적으로 한가지 permission을 더 필요로 합니다.
Manifest에 permission 추가 뒤, MainActivity 부분에 Bluetooth에 필요한 permission을 사용자에게 요청하는 부분을 추가해 주어야 합니다. onCreate() 함수에 구현.
PackageManager.PERMISSION_GRANTED){ final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("블루투스에 대한 액세스가 필요합니다"); builder.setMessage("어플리케이션이 비콘을 감지할 수 있도록 위치 정보 액세스 권한을 부여하십시오.");
builder.setPositiveButton(android.R.string.ok, null); builder.setOnDismissListener(new DialogInterface.OnDismissListener() { public void
onDismiss(DialogInterface dialog) { PERMISSION_REQUEST_COARSE_LOCATION); 이렇게 구현하면 Application 실행 시 사용자에게 해당 권한에 대한 승인 요청을 하게 됩니다. 그 뒤 사용자의 동의 여부에 따른 메시지를 처리하게 위한 부분을 아래와 같이 구현합니다. MainActivity Class에 구현. @Override 여기까지 구현 한 뒤에 MainActivity Class내부에 아래 상수만 선언해 주면 끝입니다. private static final int PERMISSION_REQUEST_COARSE_LOCATION=1; 이렇게 추가 한 뒤에 Application을 실행 한 뒤, Scan을 하면 Bluetooth 목록이 잘 올라오는 것을 확인 할 수 있습니다. |