为什么 startActivityForResult() 不会导致 onActivityResult() 执行?

Why doesn't startActivityForResult() lead to onActivityResult() execution?

仍在尝试制作我的屏幕录制应用程序。我一直在使用 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:我的 phone 向我展示了一个对话框 window 是否允许捕获屏幕,所以我允许它并得到一个特殊符号(smth像显示波浪的屏幕)在我的状态栏。

但过了一会儿,我在停止记录并重新启动调试会话以更准确地跟踪它时发现了一个问题。之后 onActivityResult() 被忽略:调用 startActivityForResult(),显示对话框 window,但在允许记录 onActivityResult() 之后被完全跳过并且 mediaProjection 为空。使用相同的代码重新启动并重新安装 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() 的意图放入 activity 的 onCreate() 修复了这个问题。

我遇到了同样的问题。这可能与线程有关。在我的项目中,我启动了一个 activity 并打开 activity 尝试启动 chrome 意图。 Chrome 正在调试模式下打开但未打开实模式。 我在打开 chrome

时添加了延迟
final Handler handler = new Handler(Looper.getMainLooper());
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            startAuth();
        }
    }, 100);