本人在使用UiAutomator測試的時候,須要用到utf7輸入法,每次執行以前都會切換到utf7輸入法,而後每次執行結束以後再切換到正常輸入法,因爲測試機器比較多,因此寫了一個自動切換到其餘任意輸入法的方法。分享代碼,供你們參考。java
/** * 修改手機輸入法爲utf7 */ public void setMobileInputMethodToUtf() { execCmdAdb("adb shell settings put secure default_input_method jp.jun_nama.test.utf7ime/.Utf7ImeService"); } /** * 設置其餘輸入法 */ public void setMobileInputMethodToOthers() { String name; List<String> lists = execCmdAndReturnResult("adb shell ime list -s"); for (int i = 0; i < lists.size(); i++) { if (!lists.get(i).contains("utf7ime")) { name = lists.get(i); execCmdAdb("adb shell settings put secure default_input_method " + name); } } }
其中execCmdAdb和execCmdAndReturnResult方法以下:shell
/** * 執行cmd命令 * * @param cmd * 命令 */ public void execCmdAdb(String cmd) { output("正在執行:" + cmd); String OSname = System.getProperty("os.name"); try { Process p = null; if (OSname.contains("Mac")) { p = Runtime.getRuntime().exec(ADB_PATH + cmd); } else { p = Runtime.getRuntime().exec("cmd /c " + cmd); } // 正確輸出流 InputStream input = p.getInputStream();// 建立並實例化輸入字節流 BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先經過inputstreamreader進行流轉化,在實例化bufferedreader,接收內容 String line = ""; while ((line = reader.readLine()) != null) {// 循環讀取 System.out.println(line);// 輸出 saveToFile(line, "runlog.log");// 保存,false表示不覆蓋 } reader.close();// 此處reader依賴於input,應先關閉 input.close(); // 錯誤輸出流 InputStream errorInput = p.getErrorStream();// 建立並實例化輸入字節流 BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorInput));// 先經過inputstreamreader進行流轉化,在實例化bufferedreader,接收內容 String eline = ""; while ((eline = errorReader.readLine()) != null) {// 循環讀取 System.out.println(eline);// 輸出 saveToFile(eline, "runlog.log");// 保存,false表示不覆蓋 } errorReader.close();// 此處有依賴關係,先關閉errorReader errorInput.close(); } catch (IOException e) { output("執行" + cmd + "失敗!"); e.printStackTrace(); } }
/** * 執行adb命令,返回信息 * * @param cmd * 命令內容 */ public List<String> execCmdAndReturnResult(String cmd) { output("正在執行:" + cmd); List<String> result = new ArrayList<String>(); String OSname = System.getProperty("os.name"); try { Process p = null; if (OSname.contains("Mac")) { p = Runtime.getRuntime().exec(ADB_PATH + cmd); } else { p = Runtime.getRuntime().exec("cmd /c " + cmd); } // 正確輸出流 InputStream input = p.getInputStream();// 建立並實例化輸入字節流 BufferedReader reader = new BufferedReader(new InputStreamReader(input));// 先經過inputstreamreader進行流轉化,在實例化bufferedreader,接收內容 String line = ""; while ((line = reader.readLine()) != null) { // output(line); result.add(line); } reader.close();// 此處reader依賴於input,應先關閉 input.close(); } catch (IOException e) { output("執行" + cmd + "失敗!"); e.printStackTrace(); } return result; }