全部產品
Search
文件中心

Cloud Phone:Android SDK

更新時間:Nov 22, 2025

無影Android SDK是用於串連雲電腦、雲應用、雲手機的無影Android端開放介面。通過整合Android SDK,您可以根據業務需求快速定製和搭建Android用戶端。

1. 快速開始

1.1 擷取SDK和DEMO

擷取方式

說明

本平台所有文檔、SDK、用戶端程式僅限於本人或本企業使用,未經阿里雲同意不會轉寄給第三方個人或企業。

Integration Environment要求

最低支援Android版本:5.1

以整合AAR包方式接入SDK

  • 將下載得到的 aspengine-third-release.aar、aspengine-player-release.aarwytrace-release.aar拷貝到app/libs目錄下。

  • 在應用模組的build.gradle加入:

dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
    // aspengine-sdk依賴的ini配置解析庫
    implementation 'org.ini4j:ini4j:0.5.4'
    // wytrace依賴的庫
    implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.8'
    implementation 'com.google.code.gson:gson:2.10.1'
    implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0@aar'
}
  • AndroidManifest 聲明必要的許可權:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE"/>

1.2 對接流程

1.3 最佳實務

方案詳見無影雲手機快速整合最佳實務。 雲手機整合的總體方案如下圖所示

有多種登入方式,擷取整合SDK所需要的串連雲手機Ticket憑證,流程圖為:

具體整合代碼可以參考生命週期介面的參考代碼。

2. 生命週期介面

2.1 初始化建立StreamView

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   requestWindowFeature(Window.FEATURE_NO_TITLE);
   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
   setContentView(R.layout.activity_stream_view_demo);
   mStreamView = findViewById(R.id.stream_view);
   mStreamView.enableDesktopMode(false);
   mStreamView.scaleStreamVideo(pref.getBoolean("fit_video_content", true) ?
   mStreamView.ScaleType.FIT_STREAM_CONTENT : StreamView.ScaleType.FILL_STREAM_VIEW);
   mStreamView.getASPEngineDelegate().setAlignStreamResolutionWithSurfaceSize(false);
}
<?xml version="1.0" encoding="utf-8"?>
<android.widget.RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".StreamViewDemoActivity">

    <com.aliyun.wuying.aspsdk.aspengine.ui.StreamView
        android:id="@+id/stream_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:focusableInTouchMode="true"
        android:focusable="true"
        android:focusedByDefault="true" />

</android.widget.RelativeLayout>

2.2 建立串連

mConfigs取值參考4.1 Config

mStreamView.start(mConfigs);

2.3 中斷連線

mStreamView.stop();

2.4 銷毀執行個體StreamView

mStreamView.dispose();
mStreamView = null;

2.5 多StreamView模式

此模式支援一個串流在多個View之間無縫切換顯示。可按照如下步驟來實現:

  1. 參照2.1 定義並初始化StreamView

  2. 使用IAspEngine來建立串連,參數與4.1 Config定義一致

    IASPEngine engine = mBuilder.enableRTC(true).build(context);
    //開啟資料統計
    engine.enableStatistics(true, true);
    ConnectionConfig cc = new ConnectionConfig();
    cc.id = CONFIG_DESKTOP_ID;
    cc.connectionTicket = CONFIG_CONNECTION_TICKET;
    cc.useVPC = CONFIG_USE_VPC;
    cc.type = OS_TYPE;
    cc.user = CONFIG_USER;
    cc.uuid = CONFIG_UUID;
    
    engine.start(cc);
  3. 將StreamView與IAspEngine綁定(該介面會將串流在當前View進行渲染)

    mStreamView.bindASPEngine(engine);
  4. 恢複StreamView與IAspEngine綁定(該介面會讓View重新接管串流進行渲染)

    mStreamView.resumeASPEngine();

更多細節請參考DEMO的實現。

2.6 回調說明

串連回調代理IASPEngineListener

代理介面說明:

介面

描述

onConnectionSuccess(int connectionId)

串連雲手機成功回調,返回串連的標識

onConnectionFailure(int errorCode, String errorMsg)

串連雲手機失敗回調,返回錯誤碼和錯誤資訊

onEngineError(int errorCode, String errorMsg)

SDK內部發生異常回調,返回錯誤碼和錯誤資訊

onDisconnected(int reason)

雲手機串連被斷開,返回被斷開原因

onReconnect(int errorCode)

雲手機串連發生重連動作,返回導致重連的錯誤碼

onFirstFrameRendered(long timeCostMS)

雲手機顯示第一幀畫面回調,返回耗時情況

onPolicyUpdate(String policy)

雲手機策略回調,返回策略配置

onSessionSuccess()

雲手機串連會話建立成功回調

效能資料回調代理IStatisticsListener

代理介面說明:

介面

描述

onStatisticsInfoUpdate(StatisticsInfo statisticsInfo)

雲手機效能資料回調,返回效能資料對象

申請系統許可權回調代理IRequestSystemPermissionListener

代理介面說明:

介面

描述

bool OnRequestSystemPermission(SystemPermission permission)

申請系統許可權回調,返回申請系統權限類別型

註冊與反註冊回調程式碼範例:

//監聽串連回調
mStreamView.getASPEngineDelegate().registerASPEngineListener(IASPEngineListener var1);
mStreamView.getASPEngineDelegate().unregisterASPEngineListener(IASPEngineListener var1);
//監聽效能資料回調
mStreamView.getASPEngineDelegate().registerStatisticsListener(IStatisticsListener var1);
mStreamView.getASPEngineDelegate().unregisterStatisticsListener(IStatisticsListener var1);
//監聽申請系統許可權
mStreamView.registerSystemPermissionListener(IRequestSystemPermissionListener listener);
mStreamView.unregisterSystemPermissionListener(IRequestSystemPermissionListener listener);

3. 業務介面

介面

說明

enableVDAgentCheck(boolean enabled)

建連時是否強制檢查VDAgent的可用性,預設是進行檢查。

當該值設定為True時,若在建連時發現VDAgent不可用,則會報錯並斷開當前串連。

不建議設定為false,通常只有在進行內部調試時才會這麼做。

enableRTC(boolean enabled)

設定是否使用RTC傳輸串流化資料內容,預設使用RTC傳輸串流化資料內容

enableDesktopMode(boolean enabled)

設定是否以桌面圖案運行,設定為enabled後,會將所有Touch訊息轉換為Mouse事件向服務端發送。雲手機建議設定為false

scaleStreamVideo(ScaleType scaleType)

指定對流化映像內容進行相應的縮放處理,ScaleType取值參考枚舉類型5.1 ScaleType

setVideoProfile(int width, int height, int fps, IRemoteResult result)

設定視頻流的解析度及幀率,幀率暫不支援

boolean sendKeyEvent(KeyEvent event)

sendKeyboardEvent(KeyEvent event, IRemoteResult result)

向雲上發送鍵盤按鍵訊息

boolean simulateMouseClick(boolean leftButton)

類比向雲上發送滑鼠點擊事件,參數true表示類比滑鼠左鍵點擊事件,false表示類比滑鼠右鍵點擊事件

boolean enableMouseMode(boolean enabled)

啟用或關閉滑鼠模式

boolean sendMouseEvent(MotionEvent motionEvent)

sendMouseEvent(MotionEvent motionEvent, IRemoteResult result)

向雲上發送滑鼠按鍵訊息

reconnect(String connectionToken)

發生串連異常斷開時,可通過該介面執行重連動作。

通常針對disconnect reason=2200執行該動作,應用程式需要通過OpenAPI重新擷取串連雲手機的token並交給重串連口執行重連動作。

boolean setMediaStreamPlayer(MediaStreamPlayer player)

使用應用自訂的媒體引擎替換SDK中預設的媒體引擎實現,該方法只能在發起串流之前,或串流斷開之後調用。

void setAlignStreamResolutionWithSurfaceSize(boolean aligned)

設定是否在串流開始時,自動將流解析度同步為端側用於渲染映像的SurfaceView的大小,預設開啟該功能。雲手機建議關閉。

void mute(boolean muted)

設定是否進入靜音。

void enableStatistics(boolean enabled)

是否開啟效能資料統計

mStreamView.getASPEngineDelegate().requestIFrame()

請求主要畫面格

mStreamView.getASPEngineDelegate()下的

registerFileTransferListener(IFileTransferListener var1)

unregisterFileTransferListener(IFileTransferListener var1)

mStreamView.getASPEngineDelegate().uploadFiles(pathList, "/sdcard/Download/");

檔案上傳和下載,demo也有對應的實現

mStreamView.getASPEngineDelegate()下的

addDataChannel(DataChannel var1)

removeDataChannel(DataChannel var1)

與鏡像接發自訂資料通道,demo也有對應的實現

mStreamView.getASPEngineDelegate()下的

addLyncChannel(LyncChannel var1)

removeLyncChannel(LyncChannel var1)

adb發送命令通道,實現參考demo裡的AspAdbUtil

void setToQualityFirst()

設定畫質優先模式,該模式下所支援的最高幀率為 30 FPS,最高畫質為優質。雲手機暫不支援。

void setToFpsFirst()

設定流暢優先模式,該模式下所支援最高幀率為 60 FPS,最高畫質為良好。雲手機暫不支援。

void setToCustomPicture(int fps, int quality);

使用者自訂模式,使用者可以自訂幀率和畫質。

參數 fps 值為 0 到 60 區間,代表幀率設定,值越高越流暢。

參數 quality 值為 0 到 4 區間,0:無損,1:優質 2:良好 3:一般 4:自動。雲手機暫不支援。

mStreamView.getASPEngineDelegate()下的

registerIMEListener、unregisterIMEListener、setImeType、enableRelativeMouse等

雲手機暫不支援。

4. 參數詳細說明

4.1 Config

建立串連的配置參數。

配置Key

取值的類型

配置說明

StreamView.CONFIG_DESKTOP_ID

string

執行個體ID,DescribeUserResources API返回的ResourceId。

StreamView.CONFIG_CONNECTION_TICKET

string

串連鑒權Ticket,通過GetConnectionTicket API擷取。

StreamView.CONFIG_PREFER_RTC_TRANSPORT

boolean

使用RTC通道,雲手機推薦true。

StreamView.CONFIG_ENABLE_VDAGENT_CHECK

boolean

是否在建連過程中檢查VDAgent可用性,雲手機推薦true。

StreamView.CONFIG_ENABLE_STATISTICS

boolean

是否啟用效能統計,若啟用,將在視頻流上額外呈現效能資料,雲手機推薦true。

OSType

string

雲手機取值為android

4.2 StatisticsInfo

效能資料

介面

類型

說明

mReceiveFps

int

接收到的幀率

mRenderFps

int

渲染幀率

mDownstreamBandwithMBPerSecond

double

下行頻寬

mUpstreamBandwithMBPerSecond

double

上行頻寬

mP2pFullLinkageLatencyMS

long

端到端全鏈路時延,已廢棄

mNetworkLatencyMS

long

網路rtt時延

mPingGatewayRttMS

long

ping rtt時延

mLostRate

double

丟包率

mServerRenderLatencyMS

long

雲側渲染延遲

mServerEncoderLatencyMS

long

雲側編碼延遲

mServerTotalLatencyMS

long

雲側總延遲

mTotalDownstreamBandwidth

long

總頻寬

mGuestCpuUsage

long

鏡像CPU使用率

mStreamType

String

流協議類型

5. 枚舉類型

5.1 ScaleType

流化映像內容縮放處理類型。

名稱

含義

FILL_STREAM_VIEW

總是將流化映像展開至與StreamView相同大小。當StreamView的長寬比例與流化映像長寬比例不相等時。採用該策略可能導致映像有明顯的變形 

FIT_STREAM_CONTENT

對StreamView的渲染地區進行調整,使得StreamView總是能以相同的長寬比例渲染流化映像內容。採用該策略時,流化映像可能無法填滿整個StreamView

5.1 SystemPermission

系統權限類別型

名稱

含義

RECORDAUDIO

請求錄音許可權

6. 自訂MediaStreamPlayer

說明

若沒有自訂多媒體的訴求,可忽略,SDK有預設多媒體實現。

6.1 使用自訂媒體引擎處理媒體資料

通過實現com.aliyun.wuying.aspsdk.aspengine.MediaStreamPlayer,應用程式可使用自訂的媒體引擎處理串流媒體資料,這些資料主要包括:

  • 視頻流資料 - 以H264/H265壓縮幀為主的視頻裸流

  • 自適應圖片流資料 - 以位元影像為主的映像流

  • 音頻下行資料 - 以Opus/PCM為主的音頻下行資料流

  • 游標資料 - 啟用虛擬滑鼠模式時,應用程式可接收到游標映像及位置資料,應用程式可使用這些資料自行繪製虛擬游標

應用程式可以通過調用IASPEngine.setMediaStreamPlayer介面向無影SDK提供自訂的媒體引擎實現。

6.2 MediaStreamPlayer

MediaStreamPlayer是一個抽象類別,它要求應用程式實現全域的初始化/銷毀方法,並提供處理不同媒體資料的自訂實現:

image.png

其中:

  • IVideoStreamHandler介面定義了用於處理視頻流資料的方法

  • IAdaptiveGraphicStreamHandler介面定義了用於處理自適應圖片流資料的方法

  • IAudioPlaybackStreamHandler介面定義了用於處理音頻下行資料的方法

  • ICursorBitmap介面定義了用於處理游標資料的方法

應用程式可自行選擇實現上述介面中的一個或多個,無影SDK最終會根據應用程式提供的介面實現設定雲上下發流的類型,規則如下:

  • 若應用程式同時提供了IVideoStreamHandler及IAdaptiveGraphicStreamHandler的實現,則串流被設定為混合模式,無影將根據當前使用的情境自動在自適應圖片流及視頻流之間進行切換

  • 若應用程式僅提供IVideoStreamHandler的實現,則串流將被設定為Video stream only,此時服務端只會提供視頻流資料

  • 若應用程式僅提供IAudioPlaybackStreamHandler的實現,則串流將被設定為Image stream only,此時服務端只會提供圖片流資料

應用程式可通過實現MediaStreamPlayer的一系列onCreateXXXHandler方法向SDK提供針對不同媒體資料的自訂實現:

    @Override
    protected IVideoStreamHandler onCreateVideoStreamHandler() {
        return new VideoStreamHandler();
    }

    @Override
    protected IAdaptiveGraphicStreamHandler onCreateAdaptiveGraphicStreamHandler() {
        return null;
    }

    @Override
    protected IAudioPlaybackStreamHandler onCreateAudioPlaybackStreamHandler() {
        return new AudioPlaybackStreamHandler();
    }

    @Override
    protected ICursorBitmapHandler onCreateCursorBitmapHandler() {
        return null;
    }

在上面的例子中,自訂媒體引擎提供了IVideoStreamHandler及IAudioPlaybackStreamHandler的實現,onCreateXXXHandler方法在一次串流過程中只會被執行一次。

主要方法調用流程:

6.2.1 initialize

由應用程式實現該方法,可用於執行自訂媒體引擎相關的全域初始化動作。

該方法在每次串流過程中將被執行一次。

public ErrorCode initialize()

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行初始化成功,否則表示初始化失敗

6.2.2 release

由應用程式實現該方法,可用於執行自訂媒體引擎相關的全域釋放動作。

該方法在每次串流過程中將被執行一次。

public ErrorCode release()

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行釋放成功,否則表示釋放失敗

6.2.3 enableStatistics

由應用程式實現該方法,可用於啟用/關閉效能統計資料擷取。

public void enableStatistics(boolean enabled)

參數:

參數

類型

說明

enabled

boolean

True表明開啟效能資料採集。

False關閉效能資料採集。

6.2.4 onCreateVideoStreamHandler

由應用程式實現該方法,用於向SDK提供處理視頻流資料的媒體引擎實現。

該方法在每次串流過程中將被執行一次。

public IVideoStreamHandler onCreateVideoStreamHandler()

傳回值:

類型

說明

IVideoStreamHandler

由應用程式提供的用於處理視頻流資料的媒體引擎實現。

若應用不提供視頻流處理實現,則返回null,在這種情況下視頻流資料不會得到任何處理。

6.2.5 onCreateAdaptiveGraphicStreamHandler

由應用程式實現該方法,用於向SDK提供處理自適應圖片流資料的媒體引擎實現。

該方法在每次串流過程中將被執行一次。

public IAdaptiveGraphicStreamHandler onCreatAdaptiveGraphicStreamHandler()

傳回值:

類型

說明

IAdaptiveGraphicStreamHandler

由應用程式提供的用於處理自適應圖片流資料的媒體引擎實現。

若應用不提供自適應圖片流處理實現,則返回null,在這種情況下,圖片流資料不會得到任何處理。

6.2.6 onCreateAudioPlaybackStreamHandler

由應用程式實現該方法,用於向SDK提供處理音頻下行資料的媒體引擎實現。

該方法在每次串流過程中將被執行一次。

public IAudioPlaybackStreamHandler onCreatAudioPlaybackStreamHandler()

傳回值:

類型

說明

IAudioPlaybackStreamHandler

由應用程式提供的用於處理音頻下行資料的媒體引擎實現。

若應用不提供音頻下行資料處理實現,則返回null,在這種情況下音頻下行資料不會得到任何處理。

6.2.7 onCreateCursorBitmapHandler

由應用程式實現該方法,用於向SDK提供處理游標資料的媒體引擎實現。

該方法在每次串流過程中將被執行一次。

通過該方法提供的介面實現僅在虛擬滑鼠模式啟用時被使用。

public ICursorBitmapHandler onCreatCursorBitmapHandler()

傳回值:

類型

說明

ICursorBitmapHandler

由應用程式提供的用於處理游標資料的媒體引擎實現。

若應用不提供游標資料處理實現,則返回null,在這種情況下,即使虛擬滑鼠模式被啟用,游標位置資料也不會得到任何處理。

6.3 IVideoStreamHandler

該介面定義了處理視頻流資料的主要方法,其主要工作流程如下:

當應用發生前後台切換時,用於渲染的Surface將被銷毀或重建,在這種情況下,IVideoStreamHandler.setVideoSurface將被多次調用,當Surface被銷毀時,通過setVideoSurface傳入的surface對象為null,應用程式需要處理好decoder及render的容錯工作。

應用程式通過實現IVideoStreamHandler.setEventHandler方法可擷取無影SDK提供的事件處理介面,通過該介面,應用程式可以將自訂媒體引擎內的一些視頻處理事件通知給無影SDK內部,目前主要用於效能資料統計:

    @Override
    public void setEventHandler(EventHandler handler) {
        Log.i(TAG, "setEventHandler handler " + handler);
        VideoStreamEventHandler.getInstance().reset(handler);
    }

...
    
    public synchronized void onVideoFrameRendered() {
        VFrame frame = mVideoFrame.remove();
        if (mEnabled && mHandler != null) {
            Event event = new Event();
            event.type = EventType.RENDER_PERF_INFO;
            event.decodePerfInfo = new VDecodePerfInfo();
            event.renderPerfInfo = new VRenderPerfInfo();
            event.renderPerfInfo.frameId = frame.frameId;
            event.renderPerfInfo.sessionId = frame.sessionId;
            // 通知無影SDK一幀視頻映像完成渲染,SDK內部根據frameId計算端側全鏈路時延
            mHandler.callback(event);
        }
    }

6.3.1 setEventHandler

由應用程式實現該方法,當自訂媒體引擎被無影SDK載入時,SDK通過該方法嚮應用程式提供EventHandler,應用程式可通過該handler發送視頻流處理事件。

public void setEventHandler(EventHandler handler)

參數:

參數

類型

說明

handler

EventHandler

由無影SDK提供的handler對象,應用程式通過該對象向SDK發送視頻流處理事件

6.3.2 addVideoTrack

由應用程式實現該方法,當一路視頻流建立時,通過該方法通知應用程式。

目前一次串流過程中最多隻存在一路視頻。

ErrorCode addVideoTrack(int trackId, VProfile profile);

參數:

參數

類型

說明

trackId

int

視頻流Id

profile

VProfile

視頻流資訊

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.3.3 setVideoSurface

由應用程式實現該方法,當用於渲染視頻的Surface狀態發生變化時,通過該方法通知應用程式。

ErrorCode setVideoSurface(int trackId, Surface surface);

參數:

參數

類型

說明

trackId

int

視頻流Id

surface

android.view.Surface

用於渲染視頻的Surface對象。

當應用程式切換到後台或發生鎖屏動作時,該對象可能為null

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.3.4 playVideo

由應用程式實現該方法,當用視頻流準備就緒時,通過該方法通知應用程式。

ErrorCode playVideo(int trackId);

參數:

參數

類型

說明

trackId

int

視頻流Id

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.3.5 removeVideoTrack

由應用程式實現該方法,當視頻流被銷毀時,通過該方法通知應用程式。

ErrorCode removeVideoTrack(int trackId);

參數:

參數

類型

說明

trackId

int

視頻流Id

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.3.6 pushVideoFrame

由應用程式實現該方法,當用於接收到新的視訊框架時,通過該方法通知應用程式。

ErrorCode setVideoSurface(int trackId, Surface surface);

參數:

參數

類型

說明

trackId

int

視頻流Id

frame

VFrame

新接收到的視訊框架資訊

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.3.7 getVideoTracks

由應用程式實現該方法,SDK通過該方法從應用程式擷取當前正在處理所有視頻流資訊。

HashMap<Integer, VProfile> getVideoTracks();

傳回值:

類型

說明

HashMap<Integer, VProfile>

應用程式擷取當前正在處理所有視頻流資訊

6.3.8 release

由應用程式實現該方法,當所有的視頻流被銷毀時,通過該方法通知應用程式執行清理動作。

ErrorCode release();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4 IAudioPlaybackStreamHandler

該介面定義了處理音頻流資料的主要方法,其主要工作流程如下:

6.4.1 initAudio

由應用程式實現該方法,當SDK內的音頻通道建立時,通過該方法通知應用程式。

ErrorCode initAudio();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.2 deInitAudio

由應用程式實現該方法,當SDK內的音頻通道被銷毀時,通過該方法通知應用程式。

ErrorCode deInitAudio();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.3 startAudioPlayback

由應用程式實現該方法,當雲手機將要開始下發音頻流時,通過該方法通知應用程式。

ErrorCode startAudioPlayback();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.4 stopAudioPlayback

由應用程式實現該方法,當雲手機停止下發音頻流時,通過該方法通知應用程式。

ErrorCode stopAudioPlayback();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.5 pushAudioPlaybackFrame

由應用程式實現該方法,當接收到新的下行音訊框架時,通過該方法通知應用程式。

ErrorCode pushAudioPlaybackFrame(AFrame pbData);

參數:

參數

類型

說明

pbData

AFrame

新接收到的音訊框架資訊

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.6 updateAudioPlaybackVol

由應用程式實現該方法,當雲手機裡的系統音量大小發生變化時,通過該方法通知應用程式。

ErrorCode updateAudioPlaybackVol(int volume);

參數:

參數

類型

說明

volume

int

雲手機裡的系統音量值,最大值為USHRT_MAX,0表示靜音。

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.7 updateAudioPlaybackMute

由應用程式實現該方法,當雲手機被靜音/解除靜音時,通過該方法通知應用程式。

ErrorCode updateAudioPlaybackMute(int mute);

參數:

參數

類型

說明

mute

int

1表示雲手機進入靜音狀態,0表示解除靜音

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.4.8 release

由應用程式實現該方法,當音頻通道被銷毀時,通過該方法通知應用程式執行清理動作。

ErrorCode release();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.5 IAdaptiveGraphicStreamHandler

該介面定義了處理映像流資料的主要方法,其主要工作流程如下:

目前應用程式擷取到的圖片框架格式為位元影像ARGB8888。

一次串流過程中最多存在一個圖片流。

6.5.1 setAdaptiveGraphicSurface

由應用程式實現該方法,當用於渲染圖片的Surface狀態發生變化時,通過該方法通知應用程式

ErrorCode setAdaptiveGraphicSurface(Surface surface);

參數:

參數

類型

說明

surface

android.view.Surface

用於渲染圖片的Surface對象。

當應用程式切換到後台或發生鎖屏動作時,該對象可能為null

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.5.2 invalidateAdaptiveGraphicSurface

由應用程式實現該方法,當用於接收到新的圖片幀資料時,通過該方法通知應用程式

ErrorCode invalidateAdaptiveGraphicSurface(Region region, byte[] buffer, BitmapFormat format);

參數:

參數

類型

說明

region

Region

圖片幀繪製地區資訊

buffer

byte[]

圖片幀資料

format

BitmapFormat

圖片框架格式資訊,預設為ARGB8888

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.5.3 release

由應用程式實現該方法,當圖片流被銷毀時,通過該方法通知應用程式執行清理動作。

ErrorCode release();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.6 ICursorBitmapHandler

該介面定義了處理游標資料的主要方法,在虛擬滑鼠模式啟用時,應用程式向SDK提供該介面的實現用於游標映像的繪製,其主要工作流程如下:

6.6.1 setCursorBitmap

由應用程式實現該方法,當雲手機裡的游標形狀發生變化時,通過該方法通知應用程式。

ErrorCode setCursorBitmap(CursorBitmap bitmap);

參數:

參數

類型

說明

bitmap

CursorBitmap

雲手機游標圖形資料

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.6.2 unsetCursorBitmap

由應用程式實現該方法,當雲手機裡的游標被隱藏時,通過該方法通知應用程式。

ErrorCode unsetCursorBitmap();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.6.3 setCursorPosition

由應用程式實現該方法,當雲手機裡的游標形狀生變化時,通過該方法通知應用程式。

ErrorCode setCursorPosition(float x, float y);

參數:

參數

類型

說明

x

float

游標的X座標

y

float

游標的Y座標

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

6.6.4 release

由應用程式實現該方法,當串連斷開,取消游標顯示時,通過該方法通知應用程式執行清理動作。

ErrorCode release();

傳回值:

類型

說明

ErrorCode

ErrorCode.OK表明執行成功,否則表示失敗

7. 錯誤碼

錯誤碼

錯誤訊息(%s表示雲手機或雲應用)

定義模組

原因

2~26主要是網路相關問題

2

串連%s失敗

ASP SDK

無效MAGIC

3

串連%s失敗

ASP SDK

資料有誤

4

用戶端與服務端版本不匹配

ASP SDK

版本不匹配

5

串連需要 TLS

ASP SDK

需要TLS

6

串連不需要 TLS

ASP SDK

不需要TLS而實際使用了TLS

7

您沒有許可權串連當前%s

ASP SDK

許可權問題

8

ASP SDK

遷移過程中client ID無效

9

串連%s失敗

ASP SDK

channel不存在

20

串連ASP伺服器失敗。

ASP SDK

channel 串連錯誤

21

TLS認證出錯了

ASP SDK

TLS 認證錯誤

22

串連%s失敗

ASP SDK

channel link 錯誤

23

串連%s失敗

ASP SDK

串連認證錯誤

24

串連%s失敗

ASP SDK

串連IO錯誤

25

串連%s失敗

ASP SDK

Ticket校正失敗。使用者串連被斷開後,若使用同一個Ticket再次請求建連,也將觸發此錯誤。

26

ASP SDK

xquic 握手失敗

串連中斷開或遇到某些錯誤的情況

2000

擷取%s資料逾時,與服務端中斷連線

ASP SDK

正常斷開

2001

%s已與服務端中斷連線。可能是因為%s進程已被強制終止。

ASP SDK

一般是端上應用被終止進程了,如Android應用使用者通過按下Home鍵終止

2002

已有使用者從其他終端串連當前%s。請稍後重試。

ASP SDK

其他人搶佔了端

2003

%s正在關機或重啟,一般由管理員操作,請稍後重試。

ASP SDK

雲手機被關機或重啟,一般是管理員操作

2004

目前使用者串連被斷開。

ASP SDK

用戶端發起斷流,或服務端發起踢人或斷流

2005

%s已逾時中斷連線,因為已達到管理員設定的使用時間長度限制。

ASP SDK

管理員設定使用時間長度被關

2010

串連%s失敗

ASP SDK

Vdagent串連失敗

2011

串連參數傳遞錯誤。

ASP SDK

串連server參數傳遞錯誤

2027

拉流模式已切換。

ASP SDK

拉流模式由搶佔模式切換為協同模式,或由協同模式切換為搶佔模式

2100

剪下板許可權,禁止從%s到本地

ASP SDK

剪貼簿許可權,禁止從VM到本地

2101

剪下板許可權,禁止從本地到%s

ASP SDK

剪貼簿許可權,禁止從本地到 VM

2200

%s正在嘗試重連...

ASP SDK

因為網路問題斷開了,ASP SDK正在重連

2201

您的裝置出現網路異常,導致%s已中斷連線。

ASP SDK

因為網路問題斷開了,ASP SDK因為鏡像原因不支援重連,應用側開始重連

2202

%s重連逾時,請檢查裝置網路後重試。

ASP SDK

ASP SDK重連逾時

端側邏輯錯誤

5100

%s串連ASP Server逾時,請稍後重試。

應用側

端側在一段時間內未接收到connected事件

5102

擷取%s資料逾時,請稍後重試。

應用側

端側在一段時間內接收到了connected但未接收到display事件

5004

用戶端出現錯誤,請重新開啟

應用側

傳入端側啟動參數有誤,一般出現在開發階段

5200

用戶端重連逾時,請稍後重試。

應用側

8. 常見問題

怎麼重啟雲手機

調用管控重啟API 重啟執行個體 進行重啟,調用重啟API後,端側串連的雲手機會斷開,重啟完成後,端側再串連雲手機。

對外Maven

暫不支援,客戶有需要使用,可以將SDK的aar庫上傳自己的Maven倉庫進行使用。

常用ADB命令

功能

命令

返回鍵

input keyevent KEYCODE_BACK

Home鍵

input keyevent KEYCODE_HOME

切換鍵

input keyevent KEYCODE_APP_SWITCH

靜音

input keyevent 164

音量增大

input keyevent KEYCODE_VOLUME_UP

音量減小

input keyevent KEYCODE_VOLUME_DOWN

隱藏導覽列

setprop persist.wy.hasnavibar false; killall com.android.systemui

顯示導覽列

setprop persist.wy.hasnavibar true; killall com.android.systemui

截圖

screencap -p /sdcard/Download/abc.png