从服务中获取Android屏幕尺寸

34

我从一个活动中使用以下方式获取屏幕大小:

Display display = getWindowManager().getDefaultDisplay();

从服务中获取显示大小是不起作用的(我知道这是很明显的原因!),但我非常需要从服务中获取显示大小。请问是否有其他方法可以获取屏幕大小?

据我所见,似乎没有办法通过服务来获取屏幕大小。 我现在所做的是至少默认启动活动一次,并将实际屏幕大小以像素为单位存储在共享首选项中。 当服务启动时,我使用共享首选项来获取该值。

这是唯一的解决方案吗?难道我们无论如何都不能从服务中获取屏幕大小吗?


2
请查看此链接:https://dev59.com/c3A75IYBdhLWcg3wrbG_ - Praveen
嗨Praveen,谢谢你的回复,但正如我上面解释的那样,getWindowsManager()是一个需要活动作为上下文的函数!而我正在尝试从服务中完成相同的操作!上面的链接无法帮助从服务中获取显示大小。除此之外,你的问题是关于密度,而我需要像素... - JaVadid
两个链接都在我的链接中。我必须告诉你,高度和宽度是像素数。查看我的问题的答案:https://dev59.com/c3A75IYBdhLWcg3wrbG_#3166551 - Praveen
再次感谢你,但我猜你没有完全阅读我的上面的评论。正如我在评论中提到的那样,“getWindowManager().getDefaultDisplay().getMetrics(dm);”函数只能从活动中调用,尝试从服务中调用它是不起作用的!它需要Activity作为上下文!希望你明白我的意思! - JaVadid
2
我没有尝试过,但是仅从浏览文档的角度来看,似乎可以通过 Service.getSystemService(WINDOW_SERVICE); 获取窗口管理器。 - Tyler
抱歉,MatrixFrog,这也行不通...看来这种方式行不通了... - JaVadid
5个回答

82

完全可以通过服务获取它:

    WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
    Display display = window.getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();

非常感谢您提供这个详细的答案,我正在寻找如何在服务中调用Display.getRotation()。给您点赞! - eternay

18

对我有效!

DisplayMetrics metrics = getApplicationContext().getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

你只需要获取上下文。


0

如果您正在启动引导服务(或以任何其他方式自动启动),则共享首选项是一个不错的选择。但是,如果您唯一启动服务的方式是通过调用Context.startService(),那么在使用Intent启动服务时添加额外信息实际上更有意义。


非常感谢你,Hamy,但这项服务更多是一种预定的形式...我不决定何时开始,用户决定时间...因此不能通过意图传递信息...谢谢你的回复伙计...我渴望听到其他人关于我可以实现的想法! - JaVadid
其次,如果我错了,请纠正我,但据我所知,在服务的情况下,意图附加项无法检索...不确定是否正确,因为从未尝试过... - JaVadid

0
由于getDefaultDisplay()现在已被弃用,这是可行的(Kotlin):
val window = getSystemService(WINDOW_SERVICE) as WindowManager
val width: Int = window.currentWindowMetrics.bounds.height()
val height: Int = window.currentWindowMetrics.bounds.width()

-1

试试这个:

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

DisplayMetrics displayMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(displayMetrics);

int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

从服务中...而不是从活动中。 - pookie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接