[英]Run USSD Code in Android without using “ Intent.ACTION_CALL”
[英]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.