마시멜로부터는 BLE 스캔을 하기 위해서는 우선 ACCESS_COARSE_LOCATION 퍼미션을 런타임 때 주어야 합니다.
// BLE 관련 Permission 주기 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ // Android M Permission check if(this.checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("This app needs location access"); builder.setMessage("Please grant location access so this app can detect beacons."); builder.setPositiveButton("Ok", null); builder.setOnDismissListener(new DialogInterface.OnDismissListener() { @TargetApi(Build.VERSION_CODES.M) @Override public void onDismiss(DialogInterface dialog) { requestPermissions(new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION); } }); builder.show(); } }
@Override public void onRequestPermissionsResult(int reqeustCode, String permission[], int[] grantResults){ switch (reqeustCode){ case PERMISSION_REQUEST_COARSE_LOCATION:{ if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ Log.d("permission", "coarse location permission granted"); }else{ final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Functionality limited"); builder.setMessage("Since location access has not been granted, " + "this app will not be able to discover beacons when in the background."); builder.setPositiveButton("Ok", null); builder.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { } }); builder.show(); } return; } } }
이 퍼미션을 주지 않으면 BLE 스캔 정보를 받아오는 ScanCallback 함수로 아무런 정보가 넘어오지 않습니다.
그리고 처음 앱을 킬 때 dialog 메시지 창을 통해 이 퍼미션에 대해서 동의를 하는지 묻고 한 번 동의를 하면 그뒤로 묻지 않습니다.
그리고 처음 앱을 킬 때 dialog 메시지 창을 통해 이 퍼미션에 대해서 동의를 하는지 묻고 한 번 동의를 하면 그뒤로 묻지 않습니다.
'안드로이드' 카테고리의 다른 글
프로젝트 폴더를 복사 붙여넣기로 옮겨다니면서 작업할 때 나는 에러 (0) | 2018.01.03 |
---|---|
엑셀파일 읽고, 쓰기위한 poi 라이브러리 추가하는 방법 (0) | 2017.04.10 |
안드로이드 Button 클릭 시 TextColor 또는 Button의 background 색 변경하기 (0) | 2016.07.06 |