Как использовать onRequestPermissionsResult для обработки разрешений в модуле React Native Android? - PullRequest
0 голосов
/ 19 февраля 2020

Я хотел бы использовать onRequestPermissionsResult в собственном модуле Android, который можно импортировать в проект React Native.

Обработка разрешений должна происходить в модуле, поэтому Разрешения Android или изменение проекта MainActivity не будут работать. Для аналогичного onActivityResult существует способ создать и добавить прослушиватель в ReactApplicationContext.

Есть ли способ сделать это для onRequestPermissionsResult?

Изменить: Добавлен собственный код модуля, чтобы показать, что я пытаюсь сделать:

public class NativeModule extends ReactContextBaseJavaModule {
    public NativeModule(ReactApplicationContext reactContext) {
        super(reactContext);
        ...
    }

    @ReactMethod
    public void requestPermissions() {
        getCurrentActivity().requestPermissions(...)
    }

    // is it possible to hook into the requestPermissions callback with the result from within the module? 
    // public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { }

    ...
}

1 Ответ

0 голосов
/ 05 мая 2020

Это плохо документировано, но да, вы можете.

  1. Обновите NativeModule, чтобы также реализовать PermissionListener и переопределить метод onRequestPermissionsResult () .
  2. Приведите текущее действие к PermissionAwareActivity и вызовите его requestPermissions () метод, передающий this в качестве аргумента listener.

Вот пример:

public class NativeModule extends ReactContextBaseJavaModule implements PermissionListener {

    @ReactMethod
    public void requestPermissions() {
        PermissionAwareActivity activity = (PermissionAwareActivity) getCurrentActivity();
        if (activity == null) {
            // Handle null case
        }

        activity.requestPermissions(..., this);
    }

    @Override
    public boolean onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // Handle result
        return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...