Android Studio 录屏
在开发Android应用程序时,我们经常需要记录和分享我们的应用的演示或教程。Android Studio提供了一个内置的录屏工具,可以轻松地录制设备屏幕,并导出为高质量的视频文件。本文将介绍如何使用Android Studio的录屏功能以及一些示例代码。
准备工作
在使用Android Studio录屏功能之前,我们需要确保以下准备工作已完成:
- 安装Android Studio:从官方网站下载并安装最新版本的Android Studio。
- 连接设备:使用USB数据线将Android设备连接到计算机,并确保已启用开发者选项和USB调试。
录制屏幕
- 打开Android Studio并创建一个新的Android项目。
- 点击工具栏上的“AVD Manager”图标,启动Android模拟器。
- 在模拟器中运行你的应用程序,或者通过USB调试运行应用程序在实际设备上。
- 在Android Studio中,点击工具栏上的“Device File Explorer”图标以打开设备文件浏览器。
- 在设备文件浏览器中,导航到
/data/local/tmp
目录。 - 右键单击空白处,选择“Start Recording Screen”选项以开始录制屏幕。
- 录制期间,你可以在右上角的工具栏上查看录制的时间。
- 当你完成屏幕录制后,点击工具栏上的“Stop Recording Screen”按钮。
- 选择一个位置保存录制的视频文件。
示例代码
下面是一个简单的示例代码,演示如何在Android中使用MediaProjectionManager
类开始和停止录制屏幕:
import android.content.Context;
import android.content.Intent;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.MediaRecorder;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Surface;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_SCREEN_CAPTURE = 1;
private MediaProjectionManager mediaProjectionManager;
private MediaProjection mediaProjection;
private VirtualDisplay virtualDisplay;
private MediaRecorder mediaRecorder;
private Button startButton;
private boolean isRecording = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
mediaRecorder = new MediaRecorder();
startButton = findViewById(R.id.start_button);
startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRecording) {
stopRecording();
} else {
startRecording();
}
}
});
}
private void startRecording() {
Intent screenCaptureIntent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(screenCaptureIntent, REQUEST_CODE_SCREEN_CAPTURE);
}
private void stopRecording() {
mediaRecorder.stop();
mediaRecorder.reset();
virtualDisplay.release();
mediaProjection.stop();
startButton.setText("Start Recording");
isRecording = false;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == RESULT_OK) {
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
Surface surface = mediaRecorder.getSurface();
virtualDisplay = mediaProjection.createVirtualDisplay("ScreenCapture",
getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels,
getResources().getDisplayMetrics().densityDpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
surface, null, null);
try {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
String fileName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
+ "/ScreenCapture_" + timeStamp + ".mp4";
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoEncodingBitRate(512 * 1000);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setVideoSize(getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels);
mediaRecorder.setOutputFile