Требуется аннотация "указать только одно из значений, anyOf или allOf"

Пытаясь применить @RequiresPermission аннотация, как описано в технических документах.

Пример показывает

Если вам требуется хотя бы одно из набора разрешений, вы можете использовать атрибут anyOf:

@RequiresPermission(anyOf = {
    Manifest.permission.ACCESS_COARSE_LOCATION,
    Manifest.permission.ACCESS_FINE_LOCATION})
public abstract Location getLastKnownLocation(String provider);

Я пытаюсь применить его в своем коде, который выполняет сканирование Bluetooth:

@RequiresPermission(anyOf = {
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION})
private void initiateConnectionProcess() {
    startScanAndBroadcast();
}

который дает ошибку

Укажите только одно из значений, anyOf или allOf

Я думал, может быть startScanAndBroadcast() имеет allOf аннотация, которая может вызвать проблемы, если аннотации разрешаются рекурсивно, но этот метод вообще не имеет аннотаций.

Ошибка остается, если тело метода пустое.

Ошибка исчезнет, ​​если я не перечислю разрешения:

@RequiresPermission(anyOf = { })
private void initiateConnectionProcess() {

Что здесь не так?

1 ответ

Решение

Обновить:
Решено в Android Studio 2.2 превью 3

После некоторой проверки кажется, что эта ошибка возникает в Android Studio 2.2 preview 2, но не в Android Studio 2.1.1.

Даже при том, что это показывает как ошибку, сборки успешны, и аннотация работает должным образом.

Похоже, это ошибка в линтере.
Подал отчет об ошибке здесь.

Я предполагаю, что вы уже поняли это, но вам нужно использовать квадратные скобки вместо фигурных скобок.

Пример:

@RequiresPermission(anyOf = [ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION])

Я использую Kotlin и последнюю версию Android Studio. Я вижу, что некоторые упоминали, что это было исправлено, но, насколько я могу судить, это не исправлено.

Версия Android Studio

Фигурные скобки

Квадратных скобок

Другие вопросы по тегам