Android 从服务获取屏幕尺寸

问题描述 投票:0回答:5

我通过使用以下活动获得了屏幕尺寸,

Display display = getWindowManager().getDefaultDisplay();

但是同样的事情在服务中不起作用(出于明显的原因,我知道!),但我迫切需要从服务中获取显示尺寸。有人可以向我解释一下获取屏幕尺寸的任何其他方法吗?

所以我想据我所知,我们无法从服务中获取屏幕尺寸。我现在所做的就是默认启动至少 1ce 的活动,并将实际屏幕尺寸(以像素为单位)存储在共享首选项中。我使用共享首选项在服务启动时获取值。

这是解决问题的唯一方法吗???我们不能通过任何方式从服务中获取屏幕尺寸吗??

android screen
5个回答
82
投票

完全有一种方法可以从服务中获取它:

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

18
投票

它对我有用!

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

您只需要获取上下文即可。


0
投票

如果您在启动时启动服务(或以其他方式自动启动),那么共享首选项是一个好方法。但是,如果启动服务的唯一方法是通过调用 Context.startService(),那么在用于启动服务的 Intent 中添加额外内容实际上更有意义。


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;
© www.soinside.com 2019 - 2024. All rights reserved.