Android怎么实现录屏

  

这篇文章主要介绍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   null

Android怎么实现录屏