更新时间: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());
            }
        }
    
    
        // 其他方法可以不实现,不会被调用
    }

相关文档