2011-03-29 75 views

回答

10

您可以拦截USSD响应,为此,您需要实现IExtendedNetworkService.aidl接口,该接口将服务与PhoneUtils绑定。然后它可以拦截任何USSD响应,并且可以轻松地在您的应用程序中读取该响应。 FYI https://github.com/alaasalman/ussdinterceptor

+0

您可以提供更多关于如何使用它的信息吗? – Majid 2013-06-20 10:46:24

+0

它是否适用于4.2.x? – vach 2013-10-30 10:25:25

+3

由于安全限制(已对PhoneApp代码进行了更改) – 2013-12-02 06:53:48

10

您可以拨打像任何其他数量的USSD请求与像这样的一个呼叫意图:

String encodedHash = Uri.encode("#"); 
String ussd = "*" + encodedHash + "12345" + encodedHash; 
startActivityForResult(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussd)), 1); 

然而,据我所知,这是目前无法解析您的应用程序的结果字符串。

+1

您可以发送请求,但对于一个应用程序,以获得结果的装置。一些开发者已经要求将其添加到android,但没有迹象表明功能请求已被接受。 – 2011-08-29 01:04:03

+1

但在*之后附加#的原因是什么? – AndroGeek 2013-06-19 06:12:31

+0

这只是实际USSD号码的一部分,因此是本地运营商的实施细节,从不知道 – alexleutgoeb 2015-03-05 16:14:13

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); 
2

在Android开始Ø有可能发送使用TelephonyManager USSD请求。

0

在API26中添加了Ussd API。 如此以来,奥利奥与USSD工作看起来SMT是这样的:

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(...);