На Android 4.4 и ниже я использую следующий код для setAccessible (истина) и получить контекст для диалога:Альтернатива getDeclaredField («MBase») на Android 5
private Context getOriginalContextForDialog(Dialog dialog) {
try {
if (dialog == null || (dialog != null && dialog.getContext() == null)){
return null;
}
Field field = dialog.getContext().getClass().getDeclaredField("mBase");
field.setAccessible(true);
Context value = (Context) field.get(dialog.getContext());
return value;
} catch (Exception e) {
logProc.errSys(LogSubcategory.USER_NOTICE, "Error getting dialog context on UIProcImpl.dismissProgressDialog.", e);
}
return null;
}
Это возвращает исключение в Android 5, потому что «mBase» не найден. Я не могу узнать, что такое эквивалент на Android 5. Я добавил «getDeclaredFields», чтобы узнать, какие значения были возвращены. Прилагаются скриншоты некоторых данных в массиве, возвращаемом из «getDeclaredFields». Я выделил красным цветом на скриншоте из Android 4.4, который показывает «mBase». Другой снимок экрана - от Android 5, и он не включает в себя «mBase».
Что будет эквивалент для «mBase» в Android 5? Или как мне лучше кодировать это, чтобы поддерживать как 4.4, так и 5?
Android 4,4
Android 5
ли смысл о ContextWrapper.getBaseContext()? – krystian71115
'dialog.getContext()' возвращает контекст, почему вы это делаете? – krystian71115
Так что я могу использовать «setAccessible (true). – Mark