使用以下的方法去获取获取应用的屏幕高度
此处通过 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获取屏幕的分辨率方法有几种等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)