마시멜로부터는 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 메시지 창을 통해 이 퍼미션에 대해서 동의를 하는지 묻고 한 번 동의를 하면 그뒤로 묻지 않습니다.


+ Recent posts