为什么startActivityForResult()没有导致onActivityResult()执行?

问题描述 投票:0回答:2

还在尝试制作我的屏幕录制应用。正如我前段时间告诉我的那样,我继续使用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并没有修复任何问题。

非常感谢您的任何建议。

java android mediarecorder onactivityresult startactivityforresult
2个回答
0
投票

你的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();
}

0
投票

有一个非常简单的解决方案。我刚刚初始化了将null放入mediaRecorder的mediaProjection的记录服务,所以之后我无法重新初始化它。在启动服务之前将调用onActivivtyResult()的intent放入activity的onCreate()中。

© www.soinside.com 2019 - 2024. All rights reserved.