[英]Why doesn't startActivityForResult() lead to onActivityResult() execution?
仍在嘗試制作我的屏幕錄制應用程序。 正如前段時間有人告訴我的那樣,我繼續使用 MediaRecorder,所以我遇到了另一個問題。
我只需要初始化一個 MediaProjection 對象即可使我的代碼工作,這就是我在 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);
}
}
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 為空之后。 使用相同的代碼重新啟動和重新安裝 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() 的意圖放入活動的 onCreate() 中修復了這個問題。
我遇到了同樣的問題。 這可能與線程有關。 在我的項目中,我開始了一項活動,並開始嘗試啟動 chrome 意圖。 Chrome 在調試模式下打開,但未在實模式下打開。 我在打開 chrome 時添加了延遲
final Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
startAuth();
}
}, 100);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.