一、实现效果
这个Demo主要是实现Android手机屏幕录制的功能,可以实现视频、音频的录制,可以选取录制视频的效果,是否开启音频录制。截图如下:
点击START按钮开始屏幕录制,这里还可以选择标清或高清视频,是否开启音频录制等;点击STOP按钮结束录制。
二、代码分析
整个Demo比较简单,只有两个类:一个是应用程序入口MainActivity,一个是具体实现录制功能的ScreenRecordService。
在MainActivity中,点击START按钮,系统向用户请求屏幕录制的相关权限,这里获取权限其实是调用 mediaProjectionManager.createScreenCaptureIntent()获得一个intent,通过 startActivityForResult(intent) 请求权限。在onActivityResult() 中响应用户动作,获得允许则开始屏幕录制。代码如下,新建MainActivity继承Activity,向其中加入以下代码:
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private TextView mTextView;
private static final String RECORD_STATUS = "record_status";
private static final int REQUEST_CODE = 1000;
private int mScreenWidth;
private int mScreenHeight;
private int mScreenDensity;
/** 是否已经开启视频录制 */
private boolean isStarted = false;
/** 是否为标清视频 */
private boolean isVideoSd = true;
/** 是否开启音频录制 */
private boolean isAudio = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "onCreate");
if(savedInstanceState != null) {
isStarted = savedInstanceState.getBoolean(RECORD_STATUS);
}
getView() ;
getScreenBaseInfo();
}
private void getView() {
mTextView = (TextView) findViewById(R.id.button_control);
if(isStarted) {
statusIsStarted();
} else {
statusIsStoped();
}
mTextView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(isStarted) {
stopScreenRecording();
statusIsStoped();
Log.i(TAG, "Stoped screen recording");
} else {
startScreenRecording();
}
}
});
RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radio_group);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch (checkedId) {
case R.id.sd_button:
isVideoSd