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

Проверить разрешения Android в методе

вот мой код, и он отлично работает.

if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    mMap.setMyLocationEnabled(true);
}

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

if (Utils.hasMapLocationPermissions(getActivity())) {
    mMap.setMyLocationEnabled(true);
}

Но setMyLocationEnabled имеет аннотацию @RequiresPermission И поэтому я не могу делегировать его методу, потому что lint и редактор показывает его как ошибку.

Есть ли какая-то аннотация для записи моего метода утилиты и подавления линта?

Что-то вроде этого

@ChecksPermission
public boolean hasMapLocationPermissions(Activity activity) {
  return // my checking logic..
}
4b9b3361

Ответ 1

Вы можете переименовать свой метод как checkLocationPermission(Activity activity). Я обнаружил, что ваше имя метода должно начинаться с "check" и заканчиваться "Permission" для передачи предупреждений Lint.

Например:

public static boolean checkLocationPermission(Context context) {
    return ActivityCompat.checkSelfPermission(context,
            Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(context,
            Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}

Ответ 2

Вы можете подавить эту ошибку как в редакторе, так и в отчетах lint, аннотируя свой метод с помощью @SuppressWarnings("MissingPermission"), или вы можете подавить ошибку только для одного оператора, разместив //noinspection MissingPermission над этой строкой.

Например:

@SuppressWarnings("MissingPermission")
public boolean hasMapLocationPermissions(Activity activity) {
  // your checking logic
}

Или:

if (Utils.hasMapLocationPermissions(getActivity())) {
    //noinspection MissingPermission
    mMap.setMyLocationEnabled(true);
}

Ответ 3

То, что я сделал, это создать класс и внутри него создать конструктор, как показано ниже:

public MarshMallowPermission(Activity activity) {
        this.activity = activity;
    }

    public boolean checkPermissionForRecord() {
        int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO);
        if (result == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

Затем внутри класса вызовите свои функции, например

 if (!marshMallowPermission.checkPermissionForRecord()) {
        marshMallowPermission.requestPermissionForRecord();
    }

и перед вызовом функции внутри вашего класса сделайте это

MarshMallowPermission marshMallowPermission = new MarshMallowPermission(getActivity());