#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();
Для получения дополнительной информации смотрите эту проблему и этот запрос на извлечение.