You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环中使用startActivityForResult运行USSD代码

解决循环执行USSD代码时的"Connection problem or invalid MMI code"错误

你遇到的问题核心在于循环内连续调用startActivityForResult发起USSD请求——系统没办法在极短时间内处理多个连续的CALL/USSD会话,前一个请求还没完成,下一个就被触发,导致系统判定为无效请求或者出现连接冲突。而单次执行时系统有足够时间处理流程,所以能成功。

下面给你两种可行的解决方案:

方案1:用Handler设置延迟逐个发起请求

给每个USSD请求之间预留足够的处理时间,让系统能完成上一个会话再执行下一个:

final String encodedHash = Uri.encode("#");
// 先把要执行的USSD请求整理成列表
List<String> ussdRequests = Arrays.asList(
    "*804" + encodedHash,
    "*804" + encodedHash,
    "*804" + encodedHash,
    "*804" + encodedHash,
    "*804" + encodedHash
);

Handler handler = new Handler(Looper.getMainLooper());
int delayMillis = 5000; // 5秒延迟,可根据设备实际情况调整

for (int i = 0; i < ussdRequests.size(); i++) {
    final int index = i;
    handler.postDelayed(() -> {
        startActivityForResult(
            new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdRequests.get(index))),
            1
        );
    }, delayMillis * i);
}

方案2:在onActivityResult中链式触发下一个请求

这种方式更可靠,能确保上一个USSD会话完全结束后,再发起下一个请求:

private int currentRequestCount = 1;
private final int TOTAL_REQUESTS = 5; // 对应你原代码中j从1到9步长2,共5次请求
final String encodedHash = Uri.encode("#");

// 先发起第一个请求
startActivityForResult(
    new Intent("android.intent.action.CALL", Uri.parse("tel:" + "*804" + encodedHash)),
    1
);

// 重写onActivityResult处理回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        currentRequestCount++;
        if (currentRequestCount <= TOTAL_REQUESTS) {
            // 触发下一个USSD请求
            startActivityForResult(
                new Intent("android.intent.action.CALL", Uri.parse("tel:" + "*804" + encodedHash)),
                1
            );
        }
    }
}

额外注意事项

  • 如果你的应用目标API是30及以上,startActivityForResult已被弃用,建议改用Activity Result API实现,核心逻辑类似,只是回调方式不同。
  • 延迟时间需要根据测试调整,不同设备处理USSD的速度有差异,5秒是一个相对安全的初始值。
  • 务必确保你的应用已经获取了CALL_PHONE权限,否则会触发权限异常。

内容的提问来源于stack exchange,提问作者SYK'O

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:36:33