还在尝试制作我的屏幕录制应用。正如我前段时间告诉我的那样,我继续使用MediaRecorder,所以我遇到了另一个问题。
我只需要初始化一个MediaProjection对象来使我的代码工作,这就是我在onActivityResult()中所做的,因为它是用this guide编写的:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECORD_REQUEST_CODE && resultCode == RESULT_OK) {
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
screenRecorder.setMediaProject(mediaProjection);
}
}
setMediaProjection()看起来像
public void setMediaProject(MediaProjection project) {
mediaProjection = project;
}
,所以它不应该造成任何麻烦。
这就是我尝试调用onActivityResult()的方式:
/* start transmission */
if(screenRecorder.isRunning()) {
screenRecorder.stopRecord();
} else {
Intent captureIntent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, RECORD_REQUEST_CODE);
}
有趣和疯狂的是,当我第一次启动调试时,它工作了!在startActivityForResult()之后我得到了onActivityResult()并初始化了mediaProjection:我的手机向我显示了一个对话框窗口,我是否允许捕获屏幕,所以我允许它并且在我的网站上有一个特殊符号(像屏幕一样显示波浪)状态栏。
但过了一会儿,我发现了一个问题,就是在停止记录并重新启动调试会话以更准确地跟踪它时。之后onActivityResult()被忽略:调用startActivityForResult(),显示对话框窗口,但在允许记录onActivityResult()后完全跳过,mediaProjection为null。使用相同的代码重新启动并重新安装apk并没有修复任何问题。
非常感谢您的任何建议。
你的onActivityResult仅在结果代码正常时执行某些操作,请尝试以下操作:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == RECORD_REQUEST_CODE && resultCode == RESULT_OK) {
mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
screenRecorder.setMediaProject(mediaProjection);
} else {
//TODO: Do something
Toast.makeText(getBaseContext(), "Result code is not RESULT_OK, ", Toast.LENGTH_LONG).show();
}
有一个非常简单的解决方案。我刚刚初始化了将null放入mediaRecorder的mediaProjection的记录服务,所以之后我无法重新初始化它。在启动服务之前将调用onActivivtyResult()的intent放入activity的onCreate()中。