Новое определенное разрешение в AOSP недоступно через Android Studio - PullRequest
2 голосов
/ 30 мая 2020

Как объясняется в следующем ответе на сообщение StackOverflow: [link1] , я добавил новый код разрешения местоположения с новым именем «ACCESS_NEW_LOCATION» в (frameworks / base / core / res / AndroidManifest. * 1028. *) из AOSP. Я создаю исходный код AOSP после добавления фрагмента кода, как описано в сообщении StackOverflow: [link2] .

Добавлен фрагмент кода:

    <permission android:name="android.permission.ACCESS_NEW_LOCATION"
    android:permissionGroup="android.permission-group.LOCATION"
    android:label="@string/permlab_accessNewLocation"
    android:description="@string/permdesc_accessNewLocation"
    android:protectionLevel="dangerous" />

Но, в студии Android, в которой я использую следующий код для доступа к недавно добавленному разрешению AOSP как:

<uses-permission android:name="android.permission.ACCESS_NEW_LOCATION"/>

Android Studio не распознает имя этого нового имени разрешения. Кроме того, я составил список разрешений, доступных для телефона Android, как описано в этом сообщении StackOverflow: [link3] . В выходных данных были указаны как системные, так и пользовательские разрешения, но имя вновь добавленного разрешения «ACCESS_NEW_LOCATION» не отображалось.

Не могли бы вы помочь мне:

  1. Какова правильная процедура добавления нового разрешения в AOSP?
  2. Как сделать так, чтобы Android Studio знала о это недавно добавленное разрешение в AOSP.
  3. Поскольку это недавно добавленное разрешение находится в файле XML в AOSP, я думаю, что оно добавит только имя; но где находится фрагмент кода, расположенный в AOSP, соответствующий этому недавно добавленному разрешению, где мы можем определить функциональность этого недавно добавленного разрешения.

1 Ответ

1 голос
/ 07 июня 2020

Как упоминалось в комментариях, это ожидаемое поведение во время компиляции. SDK (в частности, android .jar), который использует ваш проект, является одним из стандартного SDK, поэтому он не знает о настраиваемых разрешениях. В вашем случае это не проблема, так как Android Studio будет жаловаться, но будет работать, поскольку настоящая проверка выполняется во время выполнения.

Что касается места, куда поставить чек, это полностью зависит от того, что ваше разрешение должно контролировать. Проверка должна быть добавлена ​​во все API, для защиты которых предназначено это разрешение.

Вот пример разрешения BLUETOOTH_ADMIN, чтобы дать вам подсказку: https://android.googlesource.com/platform/packages/apps/Bluetooth/+/9a0efb0/src/com/android/bluetooth/btservice/AdapterService.java#470

    public boolean enable() {
        enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
                "Need BLUETOOTH ADMIN permission");
        Log.d(TAG,"enable() called...");
        Message m =
                mAdapterStateMachine.obtainMessage(AdapterState.USER_TURN_ON);
        m.arg1 = 1; //persist state
        mAdapterStateMachine.sendMessage(m);
        return true;
    }  

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

...