Android 获取手机屏幕高度 getMetrics和getRealMetrics的区别

Android 获取手机屏幕高度 getMetrics和getRealMetrics的区别,第1张

先说正确的获取屏幕高度方式

使用以下的方法去获取获取应用的屏幕高度

此处通过 getMetrics() 获取的高度其实是去除了虚拟按键后的高度。所以和手机的实际屏幕高度可能有差异

getReaMetrics() 则是真正原始的屏幕尺寸

接下来实现一个简单的Android屏幕镜像功能,主要涉及到以下这些知识点:

Android50 及更高版本支持屏幕采集,屏幕采集需要用动态申请权限。

如上,获取截屏权限后,就可以开始截屏了。

通过 MediaProjection 的 createVirtualDisplay 方法可将截屏画面给到指定的 surface 中,这里我们截屏的画面不需要显示,而是需要将画面数据给到 MediaCodec 编码,所以这里需要通过 MediaCodec 生成一个 surface 用于接收截屏数据。

接下来调用 MediaCodec 的 start 方法,就可以获取编码数据

由于是通过 surface 获取的编码数据,所以这里没有 onInputBufferAvailable 回调,只需监听 onOutputBufferAvailable 方法,就可以获得编码数据。 Android50 之后系统推荐使用这种通过异步获取编解码数据的方式,同时 Android50 之后系统也提供了同步获取编解码数据的方式。

Android50 之前的同步获取方式已经标记废弃了。

接下来可以在 encodeFrame 方法中处理 h264 数据

这里将数据回调给调用者处理,调用者可以储存为文件,也可以直接通过 socket 发送到服务器处理。

结束屏幕录制的时候要及时释放这些系统资源

屏幕的采集编码暂到这里,接下来我们要在本机完成解码显示。

获取屏幕分辨率的方式如下:

一、在activity中

1、DisplayMetrics dm = getResources()getDisplayMetrics();

int screenWidth = dmwidthPixels;

int screenHeight = dmheightPixels;

2、DisplayMetrics dm = new DisplayMetrics();

thisgetWindowManager()getDefaultDisplay()getMetrics(dm);

int screenWidth = dmwidthPixels;

int screenHeight = dmheightPixels;

二、在service中

DisplayMetrics dm = new DisplayMetrics();

dm = getResources()getDisplayMetrics();

int screenWidth = dmwidthPixels;

int screenHeight = dmheightPixels;

三、在非activity中,传一个Context进来调用

1、public ImageGalleryAdapter(Context c) {

myContext = c;

DisplayMetrics dm = cgetResources()getDisplayMetrics();

int screenWidth = dmwidthPixels;

int screenHeight = dmheightPixels;

}

2、public class BaseTools {

public static int getWindowWidth(Context context){

// 获取屏幕分辨率

WindowManager wm = (WindowManager) (contextgetSystemService(ContextWINDOW_SERVICE));

DisplayMetrics dm = new DisplayMetrics();

wmgetDefaultDisplay()getMetrics(dm);

int mScreenWidth = dmwidthPixels;

return mScreenWidth;

}

public static int getWindowHeigh(Context context){

// 获取屏幕分辨率

WindowManager wm = (WindowManager) (contextgetSystemService(ContextWINDOW_SERVICE));

DisplayMetrics dm = new DisplayMetrics();

wmgetDefaultDisplay()getMetrics(dm);

int mScreenHeigh = dmheightPixels;

return mScreenHeigh;

}

}

thisgetWindow()getWindowManager()getDefaultDisplay()getWidth();

thisgetWindow()getWindowManager()getDefaultDisplay()getHeight();

获取屏幕的宽高

以上就是关于Android 获取手机屏幕高度 getMetrics和getRealMetrics的区别全部的内容,包括:Android 获取手机屏幕高度 getMetrics和getRealMetrics的区别、Android屏幕镜像一:屏幕采集 + MediaCodec编码、android获取屏幕的分辨率方法有几种等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9386614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存