Как отправить код USSD, содержащий десятичную плавающую точку (.)?

Мне нужно отправить USSD-код, содержащий двойное значение, которое представляет собой сумму счета баланса, которую нужно передать. Это значение состоит из целочисленного числа и необязательно десятичного разделителя и еще двух цифр. Мой код выглядит следующим образом:

double doubleValue = 0.70; String phoneNumber = "51234567", pincode = "1234"; String ast = Uri.encode("*"); String baseUssd = ast + "234" + ast + "1" + ast + phoneNumber + ast + pincode + ast; StringBuilder builder = new StringBuilder(); builder.append(baseUssd); builder.append(doubleValue); //ie: 1.35, 0.80 builder.append(Uri.encode("#")); Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + builder.toString())); startActivity(intent); 

Мой телефон рассматривает doubleValue как 135, 080 и т. Д., Игнорируя символ разделителя точек. Надеюсь, что окончательный код включает в себя «точку», позволяющую отправлять десятичное значение. Кто-то решил эту проблему?

Показанный код Java отлично работает, полагая, что doubleValue является поплавком или двойным.

Как предлагается здесь, Intent обрабатывается OutgoingCallBroadcaster.processIntent (), который обрабатывает строку, указанную в Intent, вызывая PhoneNumberUtils.convertKeypadLettersToDigits () и PhoneNumberUtils.stripSeparators() .

Последний разбивает все, кроме цифр, * , # , + и символов WILD , WAIT и PAUSE .

Здесь теряется ваш разделитель.

Поэтому либо разделитель должен быть экранирован до определенного числового значения, либо заменен одним из принятых символов, чтобы фактически покинуть ваш телефон и добраться до приемника.

Тот, кто несет ответственность за принимающую сторону, может, вероятно, советовать вам правильно форматировать десятичное число.

Думая о том, как работает pinpad, который отправил мне мой банк, вам всегда нужно вводить две цифры после десятичной точки, а форматирование на дисплее касается положения точки.

Поэтому, если я вхожу в «1», он интерпретируется как 0,01. Аналогично «1023» будет 10.23.

Я думаю, что один и тот же подход может сработать для вас. Таким образом, 1.23 вводится как «123» и 0,80 как «80»,

Я не вижу ссылку, которая ограничивает символы 0-9 # *, но все примеры следуют этому формату. Однако ваш пример начинается с * 234, который, похоже, соответствует этому правилу в спецификации

Случай a) 1, 2 или 3 цифры из набора (*, #), за которым следует 1X (Y), где X = любое число 0-4, Y = любое число 0-9, затем, необязательно «*, за которым следует любое число Любых символов "и заканчивая # SEND: этот случай зарезервирован для использования HPLMN. Когда обслуживающая сеть получает такое сообщение от посетившего абонента, оно передает сообщение USSD непосредственно в HPLMN. Если он получает его от домашнего абонента, он должен решить, следует ли его обрабатывать локально или передать его в HLR

http://www.etsi.org/deliver/etsi_ts/100600_100699/100625/07.00.00_60/ts_100625v070000p.pdf

В общем, я не уверен, что HPLMN (Home Public Land Mobile Network) или HLR (Home Location Register) будет ожидать дополнительных символов, даже если весь набор символов и даже другие наборы символов разрешены в USSD-протоколе.