Android打开camera实现录屏
时间: 2023-11-15 17:52:50 浏览: 216
要在 Android 上实现录屏,您可以使用 MediaProjection API。下面是一个简单的示例代码:
首先,在 AndroidManifest.xml 文件中添加以下权限:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
```
然后,在您的 Activity 中,您可以按照以下步骤进行操作:
1. 请求录屏权限:
```java
private static final int REQUEST_CODE = 1;
private MediaProjectionManager mediaProjectionManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
startRecording(mediaProjection);
}
}
```
2. 开始录屏:
```java
private MediaRecorder mediaRecorder;
private VirtualDisplay virtualDisplay;
private void startRecording(MediaProjection mediaProjection) {
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncodingBitRate(512 * 1000);
mediaRecorder.setVideoFrameRate(30);
// 保存录屏文件
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "screen.mp4");
mediaRecorder.setOutputFile(file.getAbsolutePath());
try {
mediaRecorder.prepare();
Surface surface = mediaRecorder.getSurface();
virtualDisplay = mediaProjection.createVirtualDisplay("ScreenRecording",
getResources().getDisplayMetrics().widthPixels,
getResources().getDisplayMetrics().heightPixels,
getResources().getDisplayMetrics().densityDpi,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
surface, null, null);
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
```
3. 停止录屏:
```java
private void stopRecording() {
if (mediaRecorder != null) {
mediaRecorder.stop();
mediaRecorder.reset();
mediaRecorder.release();
mediaRecorder = null;
}
if (virtualDisplay != null) {
virtualDisplay.release();
virtualDisplay = null;
}
}
```
请注意,这只是一个简单的示例代码,您可能需要根据您的需求进行适当的修改和完善。此外,录屏期间可能会有一些性能和兼容性方面的问题,您可能需要进行一些额外的处理。
阅读全文