在我的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
答案 0 :(得分:5)
意味着拨号器会对此进行转换:
#144#73MA#
到此
#144#73
62
#
:为什么?
我将尝试仅回答为什么部分。
Intent.ACTION_CALL
由OutgoingCallBroadcaster
课程处理。如果你看一下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”。
希望这有帮助。