<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # PressKeyCode ~~~ package io.appium.android.bootstrap.handler; import com.android.uiautomator.core.UiDevice; import io.appium.android.bootstrap.AndroidCommand; import io.appium.android.bootstrap.AndroidCommandResult; import io.appium.android.bootstrap.CommandHandler; import org.json.JSONException; import org.json.JSONObject; import java.util.Hashtable; /** * This handler is used to PressKeyCode. * */ public class PressKeyCode extends CommandHandler { public Integer keyCode; public Integer metaState; /* * @param command The {@link AndroidCommand} used for this handler. * * @return {@link AndroidCommandResult} * * @throws JSONException * * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android. * bootstrap.AndroidCommand) */ @Override public AndroidCommandResult execute(final AndroidCommand command) throws JSONException { try { final Hashtable<String, Object> params = command.params(); Object kc = params.get("keycode"); if (kc instanceof Integer) { keyCode = (Integer) kc; } else if (kc instanceof String) { keyCode = Integer.parseInt((String) kc); } else { throw new IllegalArgumentException("Keycode of type " + kc.getClass() + "not supported."); } if (params.get("metastate") != JSONObject.NULL) { metaState = (Integer) params.get("metastate"); UiDevice.getInstance().pressKeyCode(keyCode, metaState); } else { UiDevice.getInstance().pressKeyCode(keyCode); } return getSuccessResult(true); } catch (final Exception e) { return getErrorResult(e.getMessage()); } } } ~~~ 有的時候手機鍵盤的一些鍵需要按,但是又沒有像pressBack這種方法供我們直接調用,這個時候我們就需要發送鍵盤的keycode來模擬這些鍵被點擊。所以PressKeyCode就是封裝這類事件的,通過上面的代碼可以看出,發送keycode分2類事件,每一類調用的方法不一樣 * 單點鍵:pressKeyCode(keyCode,metaState) * 組合鍵:? pressKeyCode(keyCode,metaState) # LongPressKeyCode ~~~ package io.appium.android.bootstrap.handler; import android.os.SystemClock; import android.view.InputDevice; import android.view.InputEvent; import android.view.KeyCharacterMap; import android.view.KeyEvent; import com.android.uiautomator.common.ReflectionUtils; import io.appium.android.bootstrap.AndroidCommand; import io.appium.android.bootstrap.AndroidCommandResult; import io.appium.android.bootstrap.CommandHandler; import org.json.JSONException; import org.json.JSONObject; import java.lang.reflect.Method; import java.util.Hashtable; /** * This handler is used to LongPressKeyCode. * */ public class LongPressKeyCode extends CommandHandler { public Integer keyCode; public Integer metaState; /* * @param command The {@link AndroidCommand} used for this handler. * * @return {@link AndroidCommandResult} * * @throws JSONException * * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android. * bootstrap.AndroidCommand) */ @Override public AndroidCommandResult execute(final AndroidCommand command) throws JSONException { try { final ReflectionUtils utils = new ReflectionUtils(); final Method injectEventSync = utils.getControllerMethod("injectEventSync", InputEvent.class); final Hashtable<String, Object> params = command.params(); keyCode = (Integer) params.get("keycode"); metaState = params.get("metastate") != JSONObject.NULL ? (Integer) params .get("metastate") : 0; final long eventTime = SystemClock.uptimeMillis(); // Send an initial down event final KeyEvent downEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, keyCode, 0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD); if ((Boolean) injectEventSync.invoke(utils.getController(), downEvent)) { // Send a repeat event. This will cause the FLAG_LONG_PRESS to be set. final KeyEvent repeatEvent = KeyEvent.changeTimeRepeat(downEvent, eventTime, 1); injectEventSync.invoke(utils.getController(), repeatEvent); // Finally, send the up event final KeyEvent upEvent = new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_UP, keyCode, 0, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD); injectEventSync.invoke(utils.getController(), upEvent); } return getSuccessResult(true); } catch (final Exception e) { return getErrorResult(e.getMessage()); } } } ~~~ 長點擊某個鍵盤鍵,和上面的單擊是有區別的,因為沒有直接的API可以調用,所以又要用到反射來做這件事,這次的反射呢調用的是InteractionController中的injectEventSync方法,首先會執行ACTION_DOWN,然后在一段時間里會重復執行這個down的動作,等事件到了以后,執行ACTION_UP這個動作松開鍵盤鍵。從而達到了我們到長按到要求。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看