簡體   English   中英

Android 工作室動作調用運行 USSD 代碼

[英]Android studio Action call to run USSD codes

通過使用我想運行 USSD 代碼的應用程序,但問題是它無法識別“#”符號。 如果我想運行“*100#”,它只會將輸入識別為“*100”。 如何添加“#”。 不承認這一點的原因是什么?

這是我的代碼...

  checkBalance.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent i = new Intent(Intent.ACTION_CALL);


            i.setData(Uri.parse("tel:"+"*100#"));

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



        }
    });

您需要在Uri.Parse()使用Uri.encode("YOUR USSD CODE") Uri.Parse()

示例:

Uri.parse("tel:"+ Uri.encode("*100#"));

試試這個代碼。使用Uri.encode("#")

    String encodedHash = Uri.encode("#");
    i.setData(Uri.parse("tel:"+"*100"+encodedHash));

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

用%23替換#可以解決您的問題

MMI 和 USSD 代碼之間有一個重要的區別。 輸入最后的“#”后立即執行 USSD,而 MMI 代碼需要單擊“調用”按鈕。

重要提示:在所有情況下,“#”都必須更改為其“%23”ASCII 值。

1- MMI 代碼與android.intent.action.DIAL操作一起使用。 這是 MMI 代碼 *#43# 的命令行示例:

    adb shell am start -a android.intent.action.CALL -d tel:*%2343%23

將觸發設備和網絡之間的交互以報告呼叫等待狀態並顯示吐司“呼叫等待/服務已激活”(或.. is not..)。

在您的代碼中; 像這樣的東西會起作用:

    DeviceManipulations.call(phoneNumber.replace("#", "%23"));

2- 與 CALL 操作一起使用時,USSD 失敗。 使用android.intent.action.DIAL 另外,它需要一些技巧:

使用命令行,您必須將代碼放在雙引號之間。 MMI 代碼示例 *#06#:

    adb shell am start -a android.intent.action.DIAL -d tel:"*%2306%23"

這將顯示設備信息彈出窗口。

使用我的DeviceManipulations代碼,將 DIAL 與“*%2306%23”一起使用會使撥號程序隨代碼打開,但不會開始執行。 解決方法是分兩部分進行: DIAL 沒有最后一個“#”:

    int intlong = codeUSSD.length();
    codeUSSD = codeUSSD.substring(0, (intlong-1));
    DeviceManipulations.dial(codeUSSD.replace("#", "%23"));

.. 后跟最后一個“#”的“input keyevent”:

    DeviceManipulations.customExec("adb shell input keyevent 18");

我想用“intput keyevent”方法發送每個字符效果最好,但上面是一個捷徑。

注意:“輸入 keyevent 18”不會觸發三星設備的操作。 這些撥號器與谷歌的撥號器不同。 我必須使用 Appium 與這些交互。

這個問題的簡短答案是:

“#”必須更改為其“%23”ASCII 值。

有關更多信息,請參閱我的詳細答案;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM