6

一部のカスタムダイヤラアプリ(たとえば、MotoBlurのDialer)は、USSD要求を実行できます。SDKを介してこれを行うことは本当に不可能ですか?

4

5 に答える 5

10

UssdapiがAPI26に追加されました。したがって、orssdで動作するOreoは次のようになります。

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

simIDを取得するには、以下を使用できます。

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

    }
于 2017-10-23T13:34:21.003 に答える
9

次のようなコールインテントを使用して、他の番号と同じようにussdリクエストをダイヤルできます。

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

ただし、afaik、現在、アプリで結果文字列を解析することはできません。

于 2011-04-01T09:19:16.650 に答える
9

USSD応答をインターセプトできます。これを行うには、サービスをPhoneUtilsにバインドするIExtendedNetworkService.aidlインターフェイスを実装する必要があります。その後、USSD応答をインターセプトでき、アプリで簡単に読み取ることができます。参考までに https://github.com/alaasalman/ussdinterceptor

于 2013-01-22T05:59:39.573 に答える
4

Android O以降、を使用してUSSDリクエストを送信することができますTelephonyManager

于 2017-06-13T06:27:15.893 に答える
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);
于 2013-07-08T15:03:39.353 に答える