使用字母字符发送USSD代码

时间:2014-04-01 11:18:21

标签: android character-encoding character ussd

在我的Android应用中,我使用以下USSD发送#144#73#代码(Intent):

String baseUssd = Uri.encode("#") + "144" + Uri.encode("#");
StringBuilder builder = new StringBuilder();
builder.append(baseUssd);
builder.append("73");
builder.append(Uri.encode("#"));

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + builder.toString()));

运作良好。

我现在想要的是发送此代码:

#144#73MA#

我使用拨号盘,按照 操作员USSD菜单 进行操作。 但是,如果我尝试使用上述Intent无效的 以编程方式 执行此操作。

我知道在使用拨号盘键入代码时无法使用字母字符,但我可以通过编程方式进行操作!!

请任何想法!

修改

当我尝试以编程方式发送时: #144#73MA# 我注意到拨号器应用程序将字母字符更改为拨号盘中对应的数字。这意味着拨号器会对此进行转换: #144#73MA#

到此#144#73 62 #:为什么?

因为:

  • M匹配数字6
  • A匹配数字2

1 个答案:

答案 0 :(得分:5)

  

意味着拨号器会对此进行转换: #144#73MA#

     

到此#144#73 62 #:为什么?

我将尝试仅回答为什么部分。

Intent.ACTION_CALLOutgoingCallBroadcaster课程处理。如果你看一下processIntent()方法,就会有这段代码(截至本文撰写时的第438~448行):

String number = PhoneNumberUtils.getNumberFromIntent(intent, this);
// Check the number, don't convert for sip uri
// TODO put uriNumber under PhoneNumberUtils
if (number != null) {
    if (!PhoneNumberUtils.isUriNumber(number)) {
        number = PhoneNumberUtils.convertKeypadLettersToDigits(number);
        number = PhoneNumberUtils.stripSeparators(number);
    }
} else {
    Log.w(TAG, "The number obtained from Intent is null.");
}

PhoneNumberUtils.convertKeypadLettersToDigits()将字母转换为等效的数字:

  

public static String convertKeypadLettersToDigits (String input)

     

根据ITU E.161和ISO / IEC 9995-8中描述的电话键盘字母映射,将指定电话号码中的任何字母(即[A-Za-z])翻译成等效的数字。 / p>      

<强>返回
  输入字符串,使用电话键盘字母映射将字母字母转换为数字。例如,输入“1-800-GOOG-411”将返回“1-800-4664-411”。

希望这有帮助。