如何用delphi扩展android类?

时间:2016-09-10 00:48:23

标签: java android delphi firemonkey

如何在Delphi中扩展java类?

实际上我需要在JResultReceiver中实现onReceiveResult事件以在函数showSoftInput中使用(view:JView; flags:Integer; resultReceiver:JResultReceiver):Boolean;

但JResultReceiver的delphi接口甚至不包含此事件:(

[JavaSignature('android/os/ResultReceiver')]
JResultReceiver = interface(JObject)
  ['{BBFBBD02-25B2-49B9-B441-CFB8DF3AA9C5}']
  function describeContents: Integer; cdecl;
  procedure send(resultCode: Integer; resultData: JBundle); cdecl;
  procedure writeToParcel(out_: JParcel; flags: Integer); cdecl;
end;
TJResultReceiver = class(TJavaGenericImport<JResultReceiverClass, JResultReceiver>) end; 

这是我想要做的java代码示例:

  // try to show the keyboard and capture the result
  InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
  IMMResult result = new IMMResult();
  imm.showSoftInput(editText, 0, result);

  // if keyboard doesn't change, handle the keypress
  int res = result.getResult();
  if (res == InputMethodManager.RESULT_UNCHANGED_SHOWN ||
          res == InputMethodManager.RESULT_UNCHANGED_HIDDEN) {
      showTags();
  }

  /**
   * To capture the result of IMM hide/show soft keyboard
   */
  private class IMMResult extends ResultReceiver {
      public int result = -1;
      public IMMResult() {
          super(null);
      }

      @Override 
      public void onReceiveResult(int r, Bundle data) {
          result = r;
      }

      // poll result value for up to 500 milliseconds
      public int getResult() {
          try {
              int sleep = 0;
              while (result == -1 && sleep < 500) {
                  Thread.sleep(100);
                  sleep += 100;
              }
          } catch (InterruptedException e) {
              Log.e("IMMResult", e.getMessage());
          }
          return result;
      }
  }

0 个答案:

没有答案