Перейти к содержанию
Fire Monkey от А до Я
  • 0

Отправить запрос и получить ответ USSD


Simons Cat

Вопрос

У меня среда программирования rad studio Delphi 10.4.2. Собственно ищу совета как отправить и получить ответ на запрос USSD.
Нашел в интернете единственный пример более или менее который похож на правду.
Привел его к виду нормальному виду, но не хватает знаний как передать функцию CallBack.

procedure TForm7.Button6Click(Sender: TObject);
var
Temp:Jstring;
ResponceCallBack: JTelephonyManager_UssdResponseCallback;
handler: JHandler;
begin
 
  TM :=TJTelephonyManager.Create;
  handler := TJHandler.Create;
  ResponceCallBack := TJTelephonyManager_UssdResponseCallback.Wrap( 
  TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE));
 
 TM.sendUssdRequest(StringToJString('*100#'), ResponceCallBack,handler);
 
end;

 

На java делается вот так. Не знаю как этот код переделать в delphi.

TelephonyManager =  telephonyManager(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    Handler handler = new Handler();
    TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() {
        @Override
        public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {
            super.onReceiveUssdResponse(telephonyManager, request, response);
            Log.e("ussd",response.toString());
 
        }
 
        @Override
        public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
            super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);
            Log.e("ussd","failed with code " + Integer.toString(failureCode));
        }
    };
 
    try {
           Log.e("ussd","trying to send ussd request");
           telephonyManager.sendUssdRequest("*123#",
                    callback,
                    handler);
        }catch (Exception e){
 
 
            String msg= e.getMessage();
            Log.e("DEBUG",e.toString());
            e.printStackTrace();
        }

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

 

TTelephonyManager_UssdResponseCallback = class(TJavaLocal, JTelephonyManager_UssdResponseCallbackClass)
procedure onReceiveUssdResponse(TelephonyManager: JtelephonyManager; request: JString; response: JCharSequence); cdecl;


var
  TelephonyManager:       JTelephonyManager;
  TelephonyManagerNative: JObject;
  ResponceCallBack:       JTelephonyManager_UssdResponseCallback;
  handler:                JHandler;
begin
  TelephonyManagerNative := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  TelephonyManager := TJTelephonyManager.Wrap((TelephonyManagerNative as ILocalObject).GetObjectID);
  ResponceCallBack := TJTelephonyManager_UssdResponseCallback.JavaClass.init;
  handler := TJHandler.JavaClass.init;
  TelephonyManager.sendUssdRequest(StringToJString('*100#'), ResponceCallBack, handler);
 

Дальше сами

Ссылка на комментарий
  • 0

Добрый день! Помогите пожалуйста разобраться с ошибкой на строке:

> ResponceCallBack := TJTelephonyManager_UssdResponseCallback.JavaClass.init;

Delphi XE10, XE11: На этой строке дает ошибку:

First chance exception at $8B4E26B3. Exception class EJNIFatal with message 'Java type android/telephony/TelephonyManager$UssdResponseCallback could not be found'. Process PhoneDialer.apk (16967)

Ссылка на комментарий
  • 0
В 17.10.2022 в 22:48, kostikkostik777 сказал:

Добрый день! Помогите пожалуйста разобраться с ошибкой на строке:

> ResponceCallBack := TJTelephonyManager_UssdResponseCallback.JavaClass.init;

Delphi XE10, XE11: На этой строке дает ошибку:

First chance exception at $8B4E26B3. Exception class EJNIFatal with message 'Java type android/telephony/TelephonyManager$UssdResponseCallback could not be found'. Process PhoneDialer.apk (16967)

Уточнение, OS windows 7 32bit.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...