尝试使用WindowManager做一些事情的时候,我们一般会先获取WindowManager的实例,即:
(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
但是此代码在Android12上(也有可能是Android11就有问题,没进一步确定)却发生报错
错误信息里有这句话:
Tried to access visual service WindowManager from a non-visual Context
大致意思就是:尝试用一个不可见的上下文去访问可见服务。
既然说我们的TinkerApplication不是可见上下文,这个地方又不能拿到Activity的上下文,所以猜想此处拿到可见上下文是不可能的了,但是报错信息中提示
Use an Activity or a Context created with Context#createWindowContext(int, Bundle),
which are adjusted to the configuration and visual bounds of an area on screen.
即我们可以通过createWindowContext方法来自己创建一个可见上下文。
经过搜索官方文档得到示例
...
final DisplayManager dm = anyContext.getSystemService(DisplayManager.class);
final Display primaryDisplay