自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.LatinIMEWeb 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);