Подтвердить что ты не робот

Исключение безопасности только на Android 6

java.lang.SecurityException: Client must have ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to perform any location operations.

Приложение отлично работает для Android версии 5 (Lollipop), но получает версию безопасности на Android версии 6.

4b9b3361

Ответ 1

В вашей деятельности:

private static final int REQUEST_FINE_LOCATION=0
...
loadPermissions(Manifest.permission.ACCESS_FINE_LOCATION,REQUEST_FINE_LOCATION);

Реализация:

private void loadPermissions(String perm,int requestCode) {
    if (ContextCompat.checkSelfPermission(this, perm) != PackageManager.PERMISSION_GRANTED) {
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this, perm)) {
            ActivityCompat.requestPermissions(this, new String[]{perm},requestCode);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case REQUEST_FINE_LOCATION: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // granted
            }
            else{
                // no granted
            }
            return;
        }

    }

}

Ответ 2

Это связано с тем, что эти разрешения являются опасными разрешениями в соответствии с новой моделью разрешения android 6.0.

необходимо разрешить опасные разрешения во время выполнения и проверять каждый раз перед использованием.

вам придется изменить свою реализацию на адаптировать новую модель разрешения.