Для вызова startActivity () из-за пределов контекста действия требуется флаг FLAG_ACTIVITY_NEW_TASK? nabinbhandari / Android-Библиотека разрешений

#android #android-permissions

#Android #android-разрешения

Вопрос:

При использовании

nabinbhandari / Android-Библиотека разрешений: Ссылка

Получение ошибки при запуске приложения на устройстве Android Уровень API> 20

Это класс, не связанный с activity. MainApp.getmContext() возвращает контекст приложения:

 String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
    Permissions.check(MainApp.getmContext(), permissions, null/*rationale*/, null/*options*/, new PermissionHandler() {
        @Override
        public void onGranted() {
            // do your task.
            Toast.makeText(MainApp.getmContext(), "Granted", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDenied(Context context, ArrayList<String> deniedPermissions) {
            Toast.makeText(MainApp.getmContext(), "Denied", Toast.LENGTH_SHORT).show();
        }
    });
  

Ошибка возникает в строке Permissions.check.

Ответ №1:

Мы должны передать контекст Activity [для которого вы хотите показать разрешения] в аргументе permission:

 public static void permissionGrant(Context mContext){
    String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
    Permissions.check(mContext, permissions, null/*rationale*/, null/*options*/, new PermissionHandler() {
        @Override
        public void onGranted() {
            // do your task.
            Toast.makeText(MainApp.getmContext(), "Granted", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onDenied(Context context, ArrayList<String> deniedPermissions) {
            Toast.makeText(MainApp.getmContext(), "Denied", Toast.LENGTH_SHORT).show();
        }
    });
}
  

Ответ №2:

Я полагаю, это из-за вашего MainApp.getmContext.getmContext. На самом деле это контекст приложения. Вам нужен контекст activity.

Комментарии:

1. Спасибо за комментарий. Поскольку я получал контекст через расширенный класс приложения. Но после передачи контекста activity он работает.

2. Как я могу получить контекст activity программно, если я не хочу, чтобы пользователь мог сам устанавливать контекст. Поскольку я работаю над библиотекой, и с этой точки зрения я не хочу, чтобы пользователь мог самостоятельно устанавливать контекст.

3. @AliAzazAlam Я не понимаю вопроса.

Ответ №3:

На некоторых устройствах при запуске нового действия из контекста службы требуется использовать Intent.FLAG_ACTIVITY_NEW_TASK в Intent . Чтобы сделать это, используйте следующий объект в качестве options параметра.

 Options options = new Options().setCreateNewTask();
  

Для получения дополнительной информации смотрите эту проблему и этот запрос на извлечение.