Как получить активность DecorVIew?.getContext () в DecorView получение DecorContext

на Android 7, получение контекста DecorView возвращает DecorContext класс и это не деятельность. Раньше я получал активность, используя Activity a = (Activity)view.getContext() но он больше не работает для DecorView на Android 7. Есть ли эффективный способ получить активность от DecorView?

Я использую отражение, чтобы получить окно DecorView, а затем получить контекст этого окна (который является Acitivity) на данный момент.

Field f = decorView.getClass().getDeclaredField("mWindow");
f.setAccessible(true);
Window w = (Window) f.get(decorView);
Activity a = (Activity) w.getContext();

есть ли способ использовать стандартный API?

1 ответов


в Android 7 (Нуга) Android представила функцию multi-window, позволяющую открывать 2 мероприятия сразу на экране (будь то ваши действия или 2 разных). Для этого они ввели новый класс под названием DecorContext используется DecorView. The DecorContext is (quote) "контекст для декоративных представлений, которые могут быть засеяны чистым контекст приложения и не зависит от активности, но все еще обеспечивают некоторые из объектов, которые деятельность имеет, например, темы, учет ресурсов и т. д.". Это означает, что DecorView больше не знает, в какой Activity это связано, только с которым Application. Следовательно, идя вперед от нуги, нельзя получить Activity С .

не уверен, что это все еще относится к вам, но вы можете сделать это:

Activity a = (Activity) decorView.findViewById(android.R.id.content).getContext();