更新时间:2026-04-10 GMT+08:00
回调注册使用建议及示例
回调注册使用建议
- 按需注册:开发者应根据实际需求注册对应的回调接口,避免不必要的资源占用。
- 避免重复注册:确保同一个回调接口不会被多次注册,防止事件重复触发。
- 及时取消注册:在不再需要监听事件时,及时取消注册回调接口,避免内存泄漏。
- 线程安全:回调注册和取消注册操作应在主线程中执行,确保线程安全。
- 模块化管理:建议将不同级别的回调接口分别管理,提高代码可维护性。
回调注册示例
注意事项:必须显示实现所有abstract回调方法,即使为空。
- 注册全局回调:
CloudPhoneClient.setPlayerCallback(new CloudPhoneClient.Callback() { @Override public void onSuccess() { Log.d("CloudPhone", "连接成功"); } @Override public void onTerminated() { Log.d("CloudPhone", "会话结束"); } @Override public void onFailure(int code, String message) { Log.e("CloudPhone", "错误码: " + code + ", 错误信息: " + message); } // 实现 AppCallback 中的方法 @Override public void onStartApp(AppOperateResponse<String> appOperateResponse) { if (appOperateResponse.isSuccess()) { Log.d("CloudPhone", "应用启动成功: " + appOperateResponse.getData()); } else { Log.e("CloudPhone", "应用启动失败: " + appOperateResponse.getMessage()); } } @Override public void onGetRunningApps(AppOperateResponse<GetAppsRsp> appOperateResponse) { if (appOperateResponse.isSuccess()) { GetAppsRsp appsRsp = appOperateResponse.getData(); Log.d("CloudPhone", "正在运行的应用: " + appsRsp.getApps().toString()); } else { Log.e("CloudPhone", "获取运行应用失败: " + appOperateResponse.getMessage()); } } // 其他方法可以不实现,前提是它们不是 abstract 的 }); - 分别注册需要的回调:
// 注册应用级回调 CloudPhoneClient.setAppCallback(new CloudPhoneClient.Callback.AppCallback() { @Override public void onStartApp(AppOperateResponse<String> appOperateResponse) { if (appOperateResponse.isSuccess()) { Log.d("CloudPhone", "应用启动成功: " + appOperateResponse.getData()); } else { Log.e("CloudPhone", "应用启动失败: " + appOperateResponse.getMessage()); } } // 其他应用级回调方法实现... }); // 注册系统级回调 CloudPhoneClient.setSysCallback(new CloudPhoneClient.Callback.SysCallBack() { @Override public void onVolumeControl(AppOperateResponse<VolumeDTO> appOperateResponse) { if (appOperateResponse.isSuccess()) { VolumeDTO volumeDTO = appOperateResponse.getData(); Log.d("CloudPhone", "音量控制结果: " + volumeDTO.getVolume()); } else { Log.e("CloudPhone", "音量控制失败: " + appOperateResponse.getMessage()); } } // 其他系统级回调方法实现... }); - Activity类直接implements(实现)对应回调接口类,并在初始化Activity时注册回调CloudPhoneClient.setPlayerCallback(this);:
public class MyCloudPhoneActivity extends Activity implements CloudPhoneClient.Callback { private PlayerFragment mPlayerFragment; private void initPlayer() { mPlayerFragment = (PlayerFragment) getFragmentManager().findFragmentById(com.nbc.acsdk.android.R.id.fragment_player); CloudPhoneClient.bindFragment(mPlayerFragment); getFragmentManager().beginTransaction().show(mPlayerFragment).commit(); CloudPhoneClient.setPlayerCallback(this); CloudPhoneClient.start(mPlayerFragment, getIntent().getExtras()); } // 只实现关心的回调方法 @Override public void onSuccess() { Log.d("CloudPhone", "连接成功"); } @Override public void onFailure(int code, String message) { Log.e("CloudPhone", "错误码: " + code + ", 错误信息: " + message); } // 实现 AppCallback 中的方法 @Override public void onStartApp(AppOperateResponse<String> appOperateResponse) { if (appOperateResponse.isSuccess()) { Log.d("CloudPhone", "应用启动成功: " + appOperateResponse.getData()); } else { Log.e("CloudPhone", "应用启动失败: " + appOperateResponse.getMessage()); } } @Override public void onGetRunningApps(AppOperateResponse<GetAppsRsp> appOperateResponse) { if (appOperateResponse.isSuccess()) { GetAppsRsp appsRsp = appOperateResponse.getData(); Log.d("CloudPhone", "正在运行的应用: " + appsRsp.getApps().toString()); } else { Log.e("CloudPhone", "获取运行应用失败: " + appOperateResponse.getMessage()); } } // 其他方法可以不实现,不会被调用 }
父主题: 回调方法注册使用说明