Android_Media:截屏
来源:互联网 发布:python求最大公约数包 编辑:程序博客网 时间:2024/05/18 13:30
MediaProjection + VirtualDisplay
有关的类
- MediaProjectionManager
- MediaProjection
- VirtualDisplay
- SurfaceView
- Sruface
MediaProjectionManager是个系统级服务,同TelephoneManager一样,通过getSystemService()方法获取;
MediaProjection 实现截屏和录屏的类
VirtualDisplay显示截屏
用SurfaceView来显示,
获取Surface
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);Surface surface = surfaceView.getHolder().getSurface();
获取DPI
DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);int ensityDpi = metrics.densityDpi;
获取MediaProjectionManager
MediaProjectionManager mediaManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
分“开始”+“结束”选项
开始的代码见下方,if else判断逻辑还没搞懂,先放着吧
if (surface == null) { LogUtil.d(TAG, "surface == null"); return;}if (mediaProjection != null) { createVirtualDisplay();} else if (mResultCode != 0 && mResultData != null) { getMediaProjection(); createVirtualDisplay();} else { startActivityForResult(mediaManager.createScreenCaptureIntent(), 1);//createScreenCaptureIntent() API>=21}
createVirtualDisplay()
VirtualDisplay mVirtualDisplay = mediaProjection.createVirtualDisplay("VirtualDisplay01", surfaceView.getWidth(), surfaceView.getHeight(), densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);
getMediaProjection()
MediaProjection mediaProjection = mediaManager.getMediaProjection(mResultCode, mResultData);
关闭 stopScreenCapture();
关闭的是VirtualDisplay
if (mVirtualDisplay != null) { mVirtualDisplay.release();//API>=19 mVirtualDisplay = null;}
onActivityResult()
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { if (resultCode != RESULT_OK) { LogUtil.d(TAG, "用户点击了取消"); return; } mResultCode = resultCode; mResultData = data; getMediaProjection(); createVirtualDisplay(); }}
销毁
@Overrideprotected void onPause() { super.onPause(); if (mVirtualDisplay != null) { mVirtualDisplay.release();//API>=19 mVirtualDisplay = null; }}@Overrideprotected void onDestroy() { super.onDestroy(); if (mediaProjection != null) { mediaProjection.stop(); mediaProjection = null; }}
其它
Demo: http://git.oschina.net/AndroidUI/ScreenCapture01
google sample:https://github.com/googlesamples/android-ScreenCapture
Android视频录制--MediaProjection
0 0
- Android_Media:截屏
- Android_Media:MediaPlayer
- android_Media操作/桌面共享
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- 截屏
- django中settings.py设置
- AngularJS入门篇1-1
- {题解}[jzoj5049]【GDOI2017模拟一试4.11】腐女的生日
- Mybatis第一个小程序
- caffe学习系列
- Android_Media:截屏
- C# 关于在vs 2013中的单元测试和页面测试(LTAF)
- 最小生成树prim算法适合稠密图(网络整理)8.12
- 【bzoj1009】[HNOI2008]GT考试
- adb 通过wifi进行调试
- 使用radon变换进行直线检测
- AngularJs之新手小白入门篇
- 01背包变形(poj2184)
- 属性 选择器 空格规范