在HarmonyOS NEXT开发中VideoController无法继承?继承VideoController后,再调用VideoController中的方法不再生效;现象就是点击暂停,暂停不下来,debug和日志可以看到方法已经被调用
在HarmonyOS NEXT开发中VideoController无法继承?继承VideoController后,再调用VideoController中的方法不再生效;现象就是点击暂停,暂停不下来,debug和日志可以看到方法已经被调用
在 HarmonyOS NEXT 开发中遇到 VideoController
继承失效的问题,可能涉及以下原因和解决方案:
VideoController
后方法调用无效VideoController
可能被设计为 final
类或未开放继承权限验证方式:
// 尝试继承时若IDE报错"cannot inherit from final VideoController"
public class CustomVideoController extends VideoController { ... } // 编译错误则证明类被封闭
解决方案:
改用 组合模式 替代继承:
public class CustomController {
private VideoController mController;
public CustomController(VideoController controller) {
this.mController = controller;
}
// 通过委托调用原有方法
public void customPause() {
mController.pause();
// 添加自定义逻辑
}
}
关键检查点:
// 确保在组件生命周期中正确绑定
@Override
public void onPageShow() {
super.onPageShow();
mVideoController.bind(mVideoComponent); // 必须绑定到组件
}
onPageHide()
后未释放资源,导致后续调用失效正确写法:
mVideoComponent.setVideoStateListener(new VideoStateListener() {
@Override
public void onPlayStatusChanged(boolean isPlaying) {
// 处理播放状态变更
}
@Override
public void onControlRequest(String cmd) {
if ("CUSTOM_PAUSE".equals(cmd)) {
doCustomPauseAction();
}
}
});
健壮性处理:
mVideoController.prepare(new AVPlayer.AVPlayerCallback() {
@Override
public void onPrepared() {
// 确保在此回调后执行操作
mVideoController.pause();
}
});
添加 调用栈日志:
public void pause() {
Log.info("CustomCtrl", "Pause called, isActive=" + isBound());
super.pause(); // 如果继承可行
// 或 mController.pause();
}
检查 权限声明:
// module.json5
"abilities": [{
"permissions": [
"ohos.permission.INTERNET",
"ohos.permission.MEDIA_CONTROL" // 视频控制所需权限
]
}]
如问题仍未解决,建议提供以下信息进一步分析:
VideoController
的具体实现代码片段IllegalStateException
或 UnsupportedOperationException
ohos.sysversion.SystemVersion.get()
获取)1 回答483 阅读✓ 已解决
1 回答493 阅读
1 回答423 阅读
456 阅读
450 阅读
440 阅读
402 阅读
解决方案如下: