我通过使用以下活动获得了屏幕尺寸,
Display display = getWindowManager().getDefaultDisplay();
但是同样的事情在服务中不起作用(出于明显的原因,我知道!),但我迫切需要从服务中获取显示尺寸。有人可以向我解释一下获取屏幕尺寸的任何其他方法吗?
所以我想据我所知,我们无法从服务中获取屏幕尺寸。我现在所做的就是默认启动至少 1ce 的活动,并将实际屏幕尺寸(以像素为单位)存储在共享首选项中。我使用共享首选项在服务启动时获取值。
这是解决问题的唯一方法吗???我们不能通过任何方式从服务中获取屏幕尺寸吗??
完全有一种方法可以从服务中获取它:
WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = window.getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
它对我有用!
DisplayMetrics metrics = getApplicationContext().getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
您只需要获取上下文即可。
如果您在启动时启动服务(或以其他方式自动启动),那么共享首选项是一个好方法。但是,如果启动服务的唯一方法是通过调用 Context.startService(),那么在用于启动服务的 Intent 中添加额外内容实际上更有意义。
由于
getDefaultDisplay()
现在已被废弃,这可以工作(kotlin):
val window = getSystemService(WINDOW_SERVICE) as WindowManager
val width: Int = window.currentWindowMetrics.bounds.height()
val height: Int = window.currentWindowMetrics.bounds.width()
试试这个:
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;