求帮助:将代码中已废弃的startActivityForResult替换为onActivityResult实现
替换废弃startActivityForResult的完整修改方案
AndroidX提供的Activity Result API是官方推荐的替代方案,以下是适配后的代码:
1. 声明ActivityResultLauncher成员变量
在你的Activity/Fragment类中添加:
private ActivityResultLauncher<Intent> screenCaptureLauncher;
2. 在初始化阶段注册回调(如onCreate方法内)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 其他初始化逻辑... // 注册屏幕捕获授权的回调 screenCaptureLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK && result.getData() != null) { // 获取授权后的MediaProjection实例 mediaProjection = mMediaProjectionManager.getMediaProjection(result.getResultCode(), result.getData()); // 继续执行屏幕录制流程 mVirtualDisplay = createVirtualDisplay(); mMediaRecorder.start(); } } ); }
3. 修改原有的录制相关方法
private void toggleScreenShare(View v) { ToggleButton toggleButton=(ToggleButton) v; if(toggleButton.isChecked()){ initRecorder(); recordScreen(); } else { mMediaRecorder.stop(); mMediaRecorder.reset(); stopRecordScreen(); mVideoView.setVisibility(View.VISIBLE); mVideoView.setVideoURI(Uri.parse(mVideoUrl)); mVideoView.start(); } } private void recordScreen() { if(mediaProjection==null){ // 启动屏幕捕获授权界面(替代原startActivityForResult) screenCaptureLauncher.launch(mMediaProjectionManager.createScreenCaptureIntent()); return; } mVirtualDisplay=createVirtualDisplay(); mMediaRecorder.start(); }
关键说明
- 原
onActivityResult的逻辑被整合到registerForActivityResult的回调中,用户完成授权后会自动触发后续录制流程 - 确保你的项目已依赖AndroidX库,若未依赖需先添加对应Gradle依赖
内容的提问来源于stack exchange,提问作者RAJ AGRAHARI
相关产品推荐
相关产品推荐

