此 SDK 提供在 Android 端快速接入云手机 Paas 平台的能力,可以通过 Android 端 SDK 方便地操作云手机实例。
运行环境
Android 4.4及以上系统版本。
快速接入
获取 SDK
SDK | 下载地址 | SDK 说明文档 | 版本发布日志 |
Android SDK | 通过 Maven 集成 |
SDK 集成
在应用模块的 'build.gradle' 中引用:
implementation 'com.tencent.tcr:tcrsdk-full:3.26.1'
SDK 使用
// 请求云手机实例的访问信息AceessInfo和鉴权Tokenprivate void requestAccessToken() {AsyncCallback<ExpServerResponse<CreateAndroidInstancesAccessTokenResponse>> createAndroidInstancesAccessTokenCallback = new AsyncCallback<ExpServerResponse<CreateAndroidInstancesAccessTokenResponse>>() {@Overridepublic void onSuccess(ExpServerResponse<CreateAndroidInstancesAccessTokenResponse> expServerResponse) {if (expServerResponse.Error != null) {Log.e(TAG, "CreateAndroidInstancesAccessToken expServerResponse.Error: " + expServerResponse.Error);return;}if (expServerResponse.Response == null) {Log.e(TAG, "CreateAndroidInstancesAccessToken Response: null");return;}// 初始化 TcrSdkinitTcrSdk(expServerResponse);}@Overridepublic void onFailure(int code, String errorMsg) {Log.e(TAG, "CreateAndroidInstancesAccessToken failed: " + code + ", " + errorMsg);Toast.makeText(FunctionActivity.this, "获取实例访问信息失败: " + code + ", " + errorMsg, Toast.LENGTH_LONG).show();finish();}};......}// 初始化TcrSdkprivate void initTcrSdk(ExpServerResponse<CreateAndroidInstancesAccessTokenResponse> expServerResponse) {TcrSdk.TcrConfig config = new TcrSdk.TcrConfig();config.type = SdkType.CloudPhone;config.ctx = this;config.logger = new TcrLogger() {// 记录日志};config.callback = new AsyncCallback<Void>() {@Overridepublic void onSuccess(Void result) {Log.i(TAG, "init TcrSdk success");}@Overridepublic void onFailure(int code, String msg) {String errorMsg = "init TcrSdk failed:" + code + " msg:" + msg;Log.e(TAG, "init TcrSdk fail. errorMsg: " + errorMsg);}};config.accessInfo = expServerResponse.Response.AccessInfo;config.token = expServerResponse.Response.Token;TcrSdk.getInstance().init(config);}// 创建Tcr会话对象private void initTcrSession() {TcrSessionConfig tcrSessionConfig = TcrSessionConfig.builder().observer(mSessionObserver).build();mTcrSession = TcrSdk.getInstance().createTcrSession(tcrSessionConfig);if (mTcrSession == null) {Log.e(TAG, "mTcrSession = null");showToast("创建会话失败,请检查TcrSdk是否初始化成功", Toast.LENGTH_SHORT);}}// 创建渲染视图private void initTcrRenderView() {if (mTcrSession == null) {showToast("创建渲染视图必须有关联的会话", Toast.LENGTH_SHORT);return;}// 创建渲染视图mRenderView = TcrSdk.getInstance().createTcrRenderView(this, mTcrSession, TcrRenderViewType.SURFACE);if (mRenderView == null) {Log.e(TAG, "mRenderView = null");showToast("创建渲染失败,请检查TcrSdk是否初始化成功", Toast.LENGTH_SHORT);return;}// 将渲染视图添加到界面上((FrameLayout) findViewById(R.id.render_view_parent)).addView(mRenderView);}// Tcr会话的观察者,处理各类事件通知的消息和数据private final Observer mSessionObserver = new Observer() {@Overridepublic void onEvent(TcrSession.Event event, Object eventData) {switch (event) {case STATE_INITED:// 本地会话对象初始化完成// 可以开始连接指定的云手机。boolean ret = mTcrSession.access(mGroupInstanceIds, mIsGroup);if (!ret) {showToast("连接云手机失败,请重试", Toast.LENGTH_SHORT);finish();}break;case STATE_CONNECTED:// 成功和指定的云手机建立连接// 设置云手机的主控、同步列表、请求主控视频流if (mIsGroup) {String masterId = mGroupInstanceIds.get(0);TcrSdk.getInstance().getAndroidInstance().setMaster(masterId);TcrSdk.getInstance().getAndroidInstance().setSyncList(mGroupInstanceIds);TcrSdk.getInstance().getAndroidInstance().requestStream(masterId, "open", "low");}break;case STATE_RECONNECTING:showToast("重连中...", Toast.LENGTH_LONG);break;case STATE_CLOSED:showToast("会话关闭", Toast.LENGTH_SHORT);finish();break;default:break;}}};