[ACCEPTED]-How is it possible to do USSD requests on Android?-ussd
Ussd api was added in API26. So since Oreo 2 working with ussd looks smt like this:
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(...);
To 1 get the simIDs, you can use the below:
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
for (SubscriptionInfo subscriptionInfo : subscriptionInfoList) {
int subscriptionId = subscriptionInfo.getSubscriptionId();
Log.d("Sims", "subscriptionId:" + subscriptionId);
}
if (subscriptionInfoList != null) {
if (subscriptionInfoList.size() == 1) {
sim1 = subscriptionInfoList.get(0).getDisplayName().toString();
tvSim1.setText(sim1);
} else {
sim1 = subscriptionInfoList.get(0).getDisplayName().toString();
sim2 = subscriptionInfoList.get(1).getDisplayName().toString();
tvSim1.setText(sim1);
tvSim2.setText(sim2);
}
}
You can dial ussd requests like any other 3 number with an call-intent like this one:
String encodedHash = Uri.encode("#");
String ussd = "*" + encodedHash + "12345" + encodedHash;
startActivityForResult(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussd)), 1);
However, afaik, it's 2 currently not possible to parse the result 1 string in your app.
You can intercept the USSD reponse , In 4 order to do that you need to implement IExtendedNetworkService.aidl 3 interface which binds the service with PhoneUtils. It 2 then can intercept any USSD response and 1 you can read that in your app easily . FYI https://github.com/alaasalman/ussdinterceptor
Starting from Android O it's possible to 1 send USSD requests using the TelephonyManager
.
hope it work for you:
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);
0
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.