实现android studio真机录屏的流程

为了帮助你了解如何在Android Studio中实现真机录屏,我将提供一份详细的步骤和相应的代码示例。请按照以下流程进行操作:

步骤 操作
1 在build.gradle文件中添加依赖项
2 创建一个新的Activity
3 在Activity中添加权限请求
4 在Activity中添加录屏逻辑
5 在Manifest文件中声明Activity

下面是每个步骤的详细说明和相应的代码示例:

步骤1:添加依赖项

首先,我们需要在项目的build.gradle文件中添加依赖项,以便在代码中使用MediaProjection和MediaRecorder类来实现录屏功能。

// 在build.gradle的dependencies中添加以下代码
dependencies {
    implementation 'com.android.support:support-compat:28.0.0' // 添加兼容库
}

这个依赖项将使我们能够使用MediaProjection和MediaRecorder类。

步骤2:创建一个新的Activity

接下来,我们需要创建一个新的Activity来处理录屏逻辑。在Android Studio中,右键单击项目包名,选择"New" -> "Activity" -> "Empty Activity"。给Activity起一个适当的名称,例如"ScreenRecordingActivity"。

步骤3:添加权限请求

在AndroidManifest.xml文件中,为我们的Activity添加必要的权限请求。这些权限包括"WRITE_EXTERNAL_STORAGE"和"RECORD_AUDIO",以便我们可以访问设备的存储和录音功能。

<!-- 在AndroidManifest.xml的<manifest>标签中添加以下代码 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

这将确保我们的应用在运行时有足够的权限来执行录屏操作。

步骤4:添加录屏逻辑

在我们新创建的Activity中,我们需要添加录屏逻辑。首先,我们将在onCreate方法中初始化MediaProjectionManager。

import android.media.MediaRecorder;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;

public class ScreenRecordingActivity extends AppCompatActivity {
    
    private MediaProjectionManager mediaProjectionManager;
    private MediaProjection mediaProjection;
    private MediaRecorder mediaRecorder;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_screen_recording);
        
        // 初始化MediaProjectionManager
        mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    }
    
    // 添加其他必要的方法和逻辑
}

在这段代码中,我们创建了一个MediaProjectionManager实例,它将用于获取MediaProjection对象。

接下来,我们需要在我们的Activity中添加开始录屏和停止录屏的方法。

public class ScreenRecordingActivity extends AppCompatActivity {
    
    // ...

    private static final int REQUEST_CODE = 1000;
    private boolean isRecording = false;
    private String videoFilePath;

    // 开始录屏的方法
    private void startRecording() {
        // 请求录屏权限
        Intent screenCaptureIntent = mediaProjectionManager.createScreenCaptureIntent();
        startActivityForResult(screenCaptureIntent, REQUEST_CODE);
    }

    // 停止录屏的方法
    private void stopRecording() {
        mediaRecorder.stop();
        mediaRecorder.reset();
        mediaRecorder.release();
        mediaProjection.stop();
        
        // 在此处可以保存录制的视频文件
        // videoFilePath是录制的视频文件的路径
    }
    
    // onActivityResult方法,用于处理录屏权限请求结果
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
            
            // 设置MediaRecorder
            mediaRecorder = new MediaRecorder();
            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(720, 1280);
            
            // 设置输出路径
            videoFilePath = getExternalFilesDir(null).getPath() + "/recorded_video.mp4";
            mediaRecorder.setOutputFile(videoFilePath);