在android中进行USSD调用

时间:2013-06-26 10:46:35

标签: android ussd

要先检查余额,我必须拨打电话 * xxx#,然后我会收到多个选项的回复,在我输入特定号码后,我会得到余额。< / p>

在我的Android应用程序中,我可以使用哪些代码?

拨打 * xxx * x#给我错误。

以下是我的代码,适用于* xxx#次调用:

String encodedHash = Uri.encode("#");
String ussd = "*" + encodedHash + lCallNum + encodedHash;
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + ussd)));

6 个答案:

答案 0 :(得分:16)

这对我有用:

private Uri ussdToCallableUri(String ussd) {

    String uriString = "";

    if(!ussd.startsWith("tel:"))
        uriString += "tel:";

    for(char c : ussd.toCharArray()) {

        if(c == '#')
            uriString += Uri.encode("#");
        else
            uriString += c;
    }

    return Uri.parse(uriString);
}

然后在工作代码中:

Intent callIntent = new Intent(Intent.ACTION_CALL, ussdToCallableUri(yourUSSDCodeHere));
startActivity(callIntent);

答案 1 :(得分:5)

String ussd = "*XXX*X" + Uri.encode("#");
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + ussd)));

这对我来说很完美。只需放置第一组,然后对#进行编码,使其具有完整的*XXX*X#。这肯定会有所帮助

答案 2 :(得分:4)

要记住的重要事项:

如果您要定位 Android Marshmallow(6.0)或更高版本,则需要在运行时请求 Manifest.permission.CALL_PHONE 权限

答案 3 :(得分:3)

试试这个,我没有测试它,但应该可以工作。

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + Uri.encode("*3282#")));
startActivity(intent);

答案 4 :(得分:1)

使用此代码。它对我有用:

Intent intent = new Intent(Intent.ACTION_CALL);
    intent.setData(Uri.parse(Uri.parse("tel:" + "*947")+Uri.encode("#")));
    startActivity(intent);

答案 5 :(得分:1)

使用此代码,它可以正常工作

Intent callIntent = new Intent(Intent.ACTION_CALL);
            String ussdCode = "*" + 2 + Uri.encode("#");
            callIntent.setData(Uri.parse("tel:" +ussdCode));

            if (ActivityCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            startActivity(callIntent);

在清单文件中添加此行

<uses-permission android:name="android.permission.CALL_PHONE" />
相关问题