这篇文章主要介绍Android怎么实现录屏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Android是什么
Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
本文总结三种用于安卓录屏的解决方案:
adb shell命令screenrecord
MediaRecorder, MediaProjection
MediaProjection , MediaCodec和MediaMuxer
screenrecord命令
screenrecord是一个shell命令,支持Android4.4(API level 19)以上,录制的视频格式为mp4 ,存放到手机sd卡里,默认录制时间为180s
adb shell screenrecord --size 1280*720 --bit-rate 6000000 --time-limit 30/sdcard/demo.mp4
--size 指定视频分辨率;
--bit-rate 指定视频比特率,默认为4M,该值越小,保存的视频文件越小;
--time-limit 指定录制时长,若设定大于180,命令不会被执行;
MediaRecorder
MediaProjection是Android5.0后才开放的屏幕采集接口,通过系统级服务MediaProjectionManager进行管理。
录屏过程可以分成两个部分,即通过MediaProjectionManage申请录屏权限,用户允许后开始录制屏幕;然后通过MediaRecorder对音视频数据进行处理。
获取MediaProjectionManager实例
MediaProjectionManager mProjectionManager=(MediaProjectionManager) getSystemService("media_projection");
申请权限
Intent captureIntent=mProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, LOCAL_REQUEST_CODE);
createScreenCaptureIntent()这个方法会返回一个intent,你可以通过startActivityForResult方法来传递这个intent,为了能开始屏幕捕捉,activity会提示用户是否允许屏幕捕捉(为了防止开发者做一个木马,来捕获用户私人信息),你可以通过getMediaProjection来获取屏幕捕捉的结果。
在onActivityResult中获取结果
@Override public 才能;void  onActivityResult (int requestCode, int resultCode,, Intent 数据),{ ,,,MediaProjection MediaProjection =, mProjectionManager.getMediaProjection (resultCode,数据); ,,,if (mediaProjection ==, null), { ,,,Log.e(标签,,“media  projection is null"); ,,,返回; ,,} ,,,File File =, new 文件(“xx.mp4");,//录屏生成文件 ,,,mediaRecord =, new MediaRecordService (displayHeight displayWidth也,,6000000,,1,, ,,,,,,,mediaProjection file.getAbsolutePath ()); ,,,mediaRecord.start (); }
创建MediaRecorder进程
package com.unionpay.service; import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.MediaRecorder; import android.media.projection.MediaProjection; import android.util.Log; public class  MediaRecordService extends Thread  { private 才能static final  String TAG =,“MediaRecordService"; private 才能;int  mWidth; private 才能;int  mHeight; private 才能;int  mBitRate; private 才能;int  mDpi; private 才能;String  mDstPath; private 才能;MediaRecorder  mMediaRecorder; private 才能;MediaProjection  mMediaProjection; private 才能static final  int FRAME_RATE =, 60,,//, 60 fps private 才能;VirtualDisplay  mVirtualDisplay; public 才能;MediaRecordService (int 宽度,int 身高,,int 比特率,,int dpi,, MediaProjection 议员,String dstPath), { 时间=mWidth 才能;宽度; 时间=mHeight 才能;高度; mBitRate 才能=,比特率; mDpi 才能=,dpi; mMediaProjection 才能;=,mp; 时间=mDstPath 才能;dstPath; ,,} @Override才能 public 才能;void 运行(),{ try {才能 ,,,initMediaRecorder (); ,,,//在mediarecorder.prepare()方法后调用 ,,,mVirtualDisplay =, mMediaProjection.createVirtualDisplay(时间+ TAG “-display",, mWidth,, mHeight,, mDpi, ,,,,,,,DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC mMediaRecorder.getSurface(),,空,,空); ,,,Log.i(标签,,“created  virtual 显示:,“,+,mVirtualDisplay); ,,,mMediaRecorder.start (); ,,,Log.i(标签,,“mediarecorder 时); ,,},catch (Exception e), { ,,,e.printStackTrace (); ,,} ,,} ,/* * ,,*,初始化MediaRecorder ,,*, ,,* @return ,,*/public 才能;void  initMediaRecorder (), { 时间=mMediaRecorder 才能;new MediaRecorder (); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullAndroid怎么实现录屏