某些自定义拨号程序应用程序(例如,来自MotoBlur的拨号程序)能够执行USSD请求。通过SDK实现这一点真的不可能吗?
答案 0 :(得分:10)
你可以拨打任何其他号码的ussd请求,其呼叫意图如下:
String encodedHash = Uri.encode("#");
String ussd = "*" + encodedHash + "12345" + encodedHash;
startActivityForResult(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussd)), 1);
然而,afaik,目前无法在您的应用中解析结果字符串。
答案 1 :(得分:10)
您可以拦截USSD响应,为此,您需要实现IExtendedNetworkService.aidl接口,该接口将服务与PhoneUtils绑定。然后它可以拦截任何USSD响应,您可以轻松地在您的应用程序中阅读。 FYI https://github.com/alaasalman/ussdinterceptor
答案 2 :(得分:3)
从Android O开始,可以使用TelephonyManager
发送USSD请求。
答案 3 :(得分:2)
在API26中添加了Ussd api。 因为Oreo和ussd合作看起来像这样:
TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
manager.sendUssdRequest("*100#", new TelephonyManager.UssdResponseCallback() {
@Override
public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {
super.onReceiveUssdResponse(telephonyManager, request, response);
}
@Override
public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);
}
}, new Handler());
TelephonyManager manager2 = manager.createForSubscriptionId(subIdForSecondSlotFromSubscriptonManager);
manager2.sendUssdRequest(...);
答案 4 :(得分:0)
希望它适合你:
String suffix = Uri.encode("#");
String ussd = suffix+"919"+"*"+number+suffix;
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:"+ ussd));
startActivity(callIntent);