标签: ussd

如何在android中阅读USSD消息?

我正在开发一个Android应用程序.我基本上想要阅读USSD对应用程序的回应.有没有API可以这样做?如何将这些消息提取到应用程序中?

api android ussd

33
推荐指数
1
解决办法
2万
查看次数

实施USSD功能.将服务绑定到PhoneUtils,而不是在每次更新时重新启动手机

我正在尝试实现一个应用程序来发送,接收和解析Android上的USSD代码.到目前为止,我使用http://commandus.com/blog/?p=58上的代码来获得此功能.为了使服务正常工作,需要重新启动手机.这在用户第一次安装应用程序时不会出现问题,但我在仿真器上测试时注意到的是,即使服务没什么新功能,手机也需要在每次更新时重新启动.我想知道的是以下内容:

  • 有没有可以让PhoneUtils绑定到我的服务而无需重启?至少在更新时间?
  • 如果没有办法,我正在考虑创建2个应用程序,一个是用户将与之交互的正常应用程序,另一个是包含我的服务的应用程序.在这种情况下,用户将在第一次运行时被提示,以防他/她需要任何ussd功能,以安装第二个应用程序.我很担心,这对用户来说很烦人.您认为解决此类方法的最佳方式是什么?

作为参考,我已经包含了我用于服务的代码,因为界面部分与原始网站上发布的代码不同.

接口:

* This file is auto-generated.  DO NOT MODIFY.
package com.android.internal.telephony;

/**
 * Interface used to interact with extended MMI/USSD network service.
 */
public interface IExtendedNetworkService extends android.os.IInterface {
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements
        com.android.internal.telephony.IExtendedNetworkService {
    private static final java.lang.String DESCRIPTOR = "com.android.internal.telephony.IExtendedNetworkService";

    /** Construct the stub at attach it to the interface. */
    public Stub() {
        this.attachInterface(this, DESCRIPTOR);
    }

    /**
     * Cast an …
Run Code Online (Sandbox Code Playgroud)

java android ussd

32
推荐指数
1
解决办法
7892
查看次数

一种在android中管理USSD对话框的新方法

几天来,我一直在这里和其他论坛上阅读有关USSD对话的线索.(USSD表示运营商的通知,其中包含通话费用详情).

我已经看到很多解决方案显然适用于Android中较低的API级别,但经过大量的测试,认为它们不再工作或者至少我无法让它们工作.

首先,我想知道是否有任何方法可以检测是否已向用户显示ussd对话框.所以我试过这个: 阻止USSD对话并阅读USSD回复?

但我从日志中获得的所有东西都与我的应用程序有关,虽然我可以在Eclipse的LogCat中看到它们,但我的应用程序中没有捕获到MMI相关的日志!也许它的工作版本低于我的Android版本(4.2.2).

然后我决定使用"IExtendedNetworkService",就像它在以下链接中使用的那样:

https://github.com/alaasalman/ussdinterceptor

使用IExtendedNetworkService在Android中获取USSD响应

如何在android中阅读USSD消息?

实施USSD功能.将服务绑定到PhoneUtils,而不是在每次更新时重新启动手机

但它对Android 4.2.2及更高版本也没用.

然后我找到了这个链接: 如何解除Android中的系统对话框?

它似乎很有希望,但即使经过大量的测试,我也无法使它工作.我想也许我做错了什么,或者也是为了降低API.

之后我尝试了许多其他的东西,比如模拟主键和后退键,甚至以编程方式触摸隐藏该通知,但由于它们都在我自己的活动下工作,所以没有一个工作.

有谁知道这些方法或其他方法是否适用于管理甚至检测Android 4.2.2及更高版本中的USSD消息?

我非常感谢任何帮助,提前谢谢.

android ussd

31
推荐指数
2
解决办法
8428
查看次数

通过USSD发送邮件需要什么?

我正在尝试开始使用USSD.我熟悉其他形式的短信.最终,我想将USSD用作实时支付平台的一部分.

谢谢.

payment sms ussd

22
推荐指数
3
解决办法
5万
查看次数

USSD服务不起作用

我正在尝试开发一个静默地拒绝USSD响应的应用程序.我已经使用http://commandus.com/blog/?p=58中的代码进行了微小的更改.我已经IExtendedNetworkService.aidl在包中com.android.internal.telephony和包USSDDumbExtendedNetworkService内创建了它com.commandus.ussd.问题是,运行应用程序后没有任何反应(即使重新启动手机后).有人能指出我做错了什么吗?我应该写任何额外的代码来使其工作吗?

IExtendedNetworkService.aidl

package com.android.internal.telephony;

/**
*  Interface used to interact with extended MMI/USSD network service.
*/
interface IExtendedNetworkService {
 /**
 * Set a MMI/USSD command to ExtendedNetworkService for further process.
 * This should be called when a MMI command is placed from panel.
 * @param number the dialed MMI/USSD number.
 */
void setMmiString(String number);

/**
 * return the specific string which is used to prompt MMI/USSD is running
 */
CharSequence …
Run Code Online (Sandbox Code Playgroud)

android ussd android-service

18
推荐指数
2
解决办法
8101
查看次数

Android USSD,SIM卡接收ussd消息或哪个SIM卡插槽接收ussd消息(双卡手机)

我能够捕获传入的ussd消息,但如何在双卡手机的情况下比较传入的ussd消息?如果我收到一条消息提示,我怎么知道传入的消息是针对哪个SIM卡?

mobile android ussd dual-sim

18
推荐指数
1
解决办法
523
查看次数

防止USSD对话并阅读USSD响应?

我做了很多关于ussd的研究,但是我无法阅读USSD,我怎么能像这个应用程序一样阻止ussd对话.

https://play.google.com/store/apps/details?id=com.iba.ussdchecker&hl=en

我安装这个https://github.com/alaasalman/ussdinterceptor重新启动我的手机(S2 android 4.0.3),发送ussd代码但没有任何反应,有人告诉我,我必须阅读日志,但我怎么能这样做.

我尝试这些代码从日志中读取USSD

USSD.java

    package com.example.ussd;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Calendar;
    import java.util.Date;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;

    import android.util.Log;

    public class USSD {

        private static String startmsg = "displayMMIComplete"; // start msg to look
                                                                // for
        private static String endmsg = "MMI code has finished running"; // stop msg
        private static String trimmsg = "- using text from MMI message: '"; // a msg
                                                                            // to
                                                                            // remove
                                                                            // from
                                                                            // the …
Run Code Online (Sandbox Code Playgroud)

android ussd

17
推荐指数
1
解决办法
3万
查看次数

交互式ussd会话(多步)不适用于Android 8(奥利奥)

我目前正在使用android api level 26(Nexus 6P)中提供的Telephony Manager(USSD响应).对于单步ussd会话,它正在工作.

参考: http://codedrago.com/q/140674/android-telephony-telephonymanager-ussd-android-8-0-oreo-does-android-8-0-api-26-support-sending-and-repying-对USSD的消息

例:

USSD请求:"A"(ussd会话启动)

USSD回复:"X"(ussd会话终止)

    TelephonyManager =  telephonyManager(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    Handler handler = new Handler();
    TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() {
        @Override
        public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {
            super.onReceiveUssdResponse(telephonyManager, request, response);
            Log.e("ussd",response.toString());

        }

        @Override
        public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
            super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);
            Log.e("ussd","failed with code " + Integer.toString(failureCode));
        }
    };

    try {
           Log.e("ussd","trying to send ussd request");
           telephonyManager.sendUssdRequest("*123#",
                    callback,
                    handler);
        }catch (Exception e){


            String msg= e.getMessage();
            Log.e("DEBUG",e.toString());
            e.printStackTrace();
        } …
Run Code Online (Sandbox Code Playgroud)

android ussd android-8.0-oreo

16
推荐指数
2
解决办法
1938
查看次数

如何发送包含十进制浮点(.)的USSD代码?

我需要发送一个包含双值的USSD代码,该代码表示​​要转移的余额账户金额.该值由整数组成,也可以是小数分隔符和2个以上的数字.我的代码如下:

    double doubleValue = 0.70;
    String phoneNumber = "51234567", pincode = "1234";
    String ast = Uri.encode("*");
    String baseUssd = ast + "234" + ast + "1" + ast + phoneNumber + ast + pincode + ast;
    StringBuilder builder = new StringBuilder();
    builder.append(baseUssd);
    builder.append(doubleValue); //i.e: 1.35, 0.80
    builder.append(Uri.encode("#"));
    Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + builder.toString()));
    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我的手机将doubleValue视为135,080等,忽略点分隔符.我希望最终的代码包含"dot",允许发送十进制值.有人解决了这个问题吗?

android currency decimal ussd separator

15
推荐指数
2
解决办法
832
查看次数

如何从Android的USSD代码获取响应?

我编写了一个使用ussd代码的应用程序.我想发送一个ussd的请求,但我不知道如何获取数据并将其保存在String中.

示例代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btn = (Button) findViewById(R.id.button1);

    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

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

        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    Toast.makeText(getApplicationContext(),
            "USSD: " + requestCode + "  " + resultCode + " ", 1).show(); …
Run Code Online (Sandbox Code Playgroud)

service android ussd

13
推荐指数
1
解决办法
2万
查看次数