自25.07版本的雲手機鏡像開始,無影雲手機支援使用本地IME,可在部分情境下提供比雲手機內建IME更好的輸入體驗。本指南適用於無影雲手機矩陣版。
IME對比
本地IME是指運行雲手機用戶端或通過SDK調取雲手機畫面的本地裝置上安裝的IME,即在本地輸入,並在雲手機執行個體中進行響應並輸出。
本地IME與雲手機內建的IME相比,各有優劣,分別適用於不同的情境,具體對比如下表所示。
|
對比項 |
雲手機內建IME |
本地IME |
|
|
優勢 |
|
|
|
|
弊端 |
|
|
|
IME切換方法
根據需要切換IME。以下方案適用於無影雲手機矩陣版。
ADB
初次啟用
在雲手機執行個體剛剛建立完成時,需要啟用雲手機內建IME。
adb shell settings put secure enabled_input_methods "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME:com.wuying.wyime/.PseudoImeService"
切換為本地IME
adb shell ime set com.wuying.wyime/.PseudoImeService
切換為雲手機內建IME
本樣本中使用的是雲手機預裝的GboardIME,您也可以替換為其他IME。
adb shell ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
Web SDK
請擷取最新的SDK(以支援本地IME)和Demo。具體操作,請參見Web SDK。
-
在串連時指定下面的參數。
config.useCustomIme=true -
隨後按照正常串連流程進行串連即可。詳細資料可參見Demo。
Android SDK
Android SDK要啟用本地IME,需要在StreamView串連前監聽來自ASP Engine的串連狀態回調,並在串連成功的回調中將本地IME設定為啟用狀態。
請擷取最新的SDK(以支援本地IME)和Demo。具體操作,請參見Android SDK。
@Override
public void onCreate() {
super.onCreate();
IASPEngineListener listener = new IASPEngineListener() {
@Override
public void onConnectionSuccess(int connectionId) {
mStreamView.getASPEngineDelegate().setImeType(ASPIMEType.ASP_IME_TYPE_LOCAL);
mStreamView.shouldProactivelyShowIME(true);
}
/* 注意:也需要實現其他介面 */
}
StreamView streamView = findViewById(R.id.stream_view);
streamView.getASPEngineDelegate().registerASPEngineListener(listener);
/* 其他 onCreate 過程 */
}
Windows SDK
由於Windows沒有統一的GUI應用程式架構,因此Windows SDK僅提供最基本的狀態回調與上行介面,與IME的互動需要您在對接時自行完成。
在Windows上使用本地IME大致包含以下步驟:
-
實現AspIme對象,用於接收
onImeFocusUpdate回調; -
建立AspClient時,調用
setAspIme來註冊AspIme對象; -
當
onImeFocusUpdate(true, false)時,調起對應UI架構的IME邏輯; -
當
onImeFocusUpdate(false, false)時,隱藏對應UI架構的IME; -
當IME提交字元時,調用
AspClient::setImeCommit方法來提交輸入內容。
不同的GUI架構適用不同的IME互動介面,常見架構對應的介面如下:
-
Qt架構
-
調起IME:
setAttribute(Qt::WA_InputMethodEnabled, true); -
擷取輸入內容:通過
void inputMethodEvent(QInputMethodEvent *event) override;回調
-
-
WPF架構
-
調起IME:實現
System.Windows.Interop.IKeyboardInputSink -
擷取輸入內容:實現
public bool TranslateChar(ref MSG msg, ModifierKeys modifiers);
-