Android 后台录制屏幕

/**
 * 
 */
package order.screen;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.media.projection.MediaProjectionManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import util.ConfigCt;

import android.util.DisplayMetrics;


/**
 * @author ASUS
 *完全透明 只是用于弹出权限申请的窗而已
 */
public class ScreenRecordActivity extends Activity {
	public static final String REQUEST_CODE="requestCode";//请求代码;
	public static final String RESULT_CODE="resultCode";//请求结果代码;
	public static final String VIDEO_TYPE="VideoType";//视频类别;
	public static final String VIDEO_AUDIO="audio";//是否录音;
	public static final String VIDEO_DATA="data";//授权数据;
	public static final String VIDEO_WIDTH="width";//视频宽;
	public static final String VIDEO_HEIGHT="height";//视频高;
	public static final String VIDEO_DENSITY="density";//视频速率;
	public static final String VIDEO_QUALITY="quality";//视频质量;
	
	public static final int REQUEST_SHOT_SCREEN= 1;//截屏
	public static final int REQUEST_RECORD_SCREEN = 2;//录屏
	public static final int REQUEST_MEDIA_PROJECTION = 0x2893;
	private int mOpType=1;//操作类型;
	private int mScreenWidth;
	private int mScreenHeight;
	private int mScreenDensity;

	private boolean isVideoSd = true;//标准视频;
	private boolean isAudio = true;/** 是否开启音频录制 */
	private String mVideoType="";//视频类别;
	public  volatile static Shotter shotter=null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		 	//setTheme(android.R.style.Theme_Dialog);//这个在这里设置 之后导致 的问题是 背景很黑
	        super.onCreate(savedInstanceState);
	        //如下代码 只是想 启动一个透明的Activity 而上一个activity又不被pause
	        requestWindowFeature(Window.FEATURE_NO_TITLE);
	        getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
	        getWindow().setDimAmount(0f);
	        getScreenBaseInfo();
	        processRequest();//处理申请权限请求;
	}
	@Override
 	protected void onNewIntent(Intent intent) {
 	    super.onNewIntent(intent);
 	    setIntent(intent);//must store the new intent unless getIntent() will return the old one
 	    processRequest();//处理申请权限请求;
 		Log.i(ConfigCt.TAG, "ct ScreenRecordActivity onNewIntent: 调用");  
 	}
	 /*
     * 处理请求
     */
    private void processRequest(){
    	int requestCode=this.getIntent().getIntExtra(REQUEST_CODE, REQUEST_SHOT_SCREEN);
    	mOpType=requestCode;
    	mVideoType=this.getIntent().getStringExtra(VIDEO_TYPE);
    	isAudio=this.getIntent().getBooleanExtra(VIDEO_AUDIO, false);
    	requestScreenRecording();
    }
	/** 
     * 获取屏幕录制的权限 
     */  
	 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void requestScreenRecording() {  
    	if (Build.VERSION.SDK_INT <21) return;
        MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);  
        Intent permissionIntent = mediaProje
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
A:以下是一个基本的Android后台屏幕录制代码: ```java public class ScreenRecorder extends Thread { private static final int VIDEO_FRAME_RATE = 30; private static final int VIDEO_BITRATE = 1000000; private static final int VIDEO_I_FRAME_INTERVAL = 10; private static final int VIDEO_WIDTH = 720; private static final int VIDEO_HEIGHT = 1280; private MediaRecorder mMediaRecorder; private Surface mSurface; private boolean mIsRecording; public ScreenRecorder(Surface surface) { mSurface = surface; } @Override public void run() { try { mMediaRecorder = new MediaRecorder(); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.Surface); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setVideoSize(VIDEO_WIDTH, VIDEO_HEIGHT); mMediaRecorder.setVideoFrameRate(VIDEO_FRAME_RATE); mMediaRecorder.setVideoEncodingBitRate(VIDEO_BITRATE); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setVideoEncodingBitRate(VIDEO_BITRATE); mMediaRecorder.setVideoFrameRate(VIDEO_FRAME_RATE); mMediaRecorder.setVideoIFrameInterval(VIDEO_I_FRAME_INTERVAL); mMediaRecorder.setOutputFile(getOutputFilePath()); mMediaRecorder.prepare(); mMediaRecorder.setInputSurface(mSurface); mMediaRecorder.start(); mIsRecording = true; } catch (Exception e) { Log.e("Screen Recorder", "Screen recording failed: " + e.getMessage()); } } public void stopRecording() { if (mIsRecording) { mMediaRecorder.stop(); mMediaRecorder.release(); mIsRecording = false; } } private String getOutputFilePath() { String directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getAbsolutePath(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentTimeStamp = dateFormat.format(new Date()); String filename = "Screen Recording - " + currentTimeStamp + ".mp4"; return directory + "/" + filename; } } ``` 首先,我们定义了一些常量,例如视频帧速率、视频编码器、视频宽度和高度等。然后,我们创建了一个`MediaRecorder`对象,并设置了视频源、输出格式、视频编码器、大小、帧速率、码率、I帧间隔和输出文件路径等参数。最后,我们调用`prepare`方法来准备录制,并调用`start`方法开始录制。 要停止录制,我们可以调用`stop`方法和`release`方法来停止和释放`MediaRecorder`对象。 请注意,由于Android限制了在后台录制屏幕的能力,因此您需要在应用程序前台或设备上运行代码。您还需要在manifest文件中声明RECORD_AUDIO和WRITE_EXTERNAL_STORAGE权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值