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

Android Studio开发Sinch通话调用callPhoneNumber报SinchClient not started崩溃

错误原因
  • SinchClient的start()方法是异步执行逻辑,调用后不会立刻完成初始化流程。你在onCreate中完成初始化配置后直接开放了通话按钮点击权限,用户点击时大概率客户端还未完成启动,因此触发「SinchClient not started」异常。
  • 未添加SinchClient启动状态监听,无法确认初始化结果,也无法在启动成功后再开放通话功能。
  • 点击事件中未做启动状态兜底校验,极端场景下即使加了监听也可能触发异常。
  • 原有代码中调用callPhoneNumber后未将返回的Call实例赋值给全局变量,也未绑定通话监听器,后续挂断逻辑、通话状态监听都会失效。
修复步骤
  1. 导入缺失的依赖类(如果已导入可跳过)
import com.sinch.android.rtc.SinchClientListener;
import com.sinch.android.rtc.ClientRegistration;
  1. 初始化按钮时默认禁用,避免用户提前点击
    在onCreate中找到按钮初始化代码,修改为:
button = findViewById(R.id.button);
button.setEnabled(false); // 初始化完成前禁止点击
callState = findViewById(R.id.callState);
  1. 给SinchClient添加启动状态监听,在sinchClient.start()调用前添加如下代码:
sinchClient.addSinchClientListener(new SinchClientListener() {
    @Override
    public void onClientStarted(SinchClient client) {
        // 启动成功,开放按钮点击权限
        runOnUiThread(() -> {
            button.setEnabled(true);
            Toast.makeText(MainActivity.this, "通话服务初始化完成", Toast.LENGTH_SHORT).show();
        });
    }

    @Override
    public void onClientFailed(SinchClient client, SinchError error) {
        // 启动失败,打印错误信息排查
        runOnUiThread(() -> {
            Toast.makeText(MainActivity.this, "通话服务初始化失败:" + error.getMessage(), Toast.LENGTH_SHORT).show();
            Log.e("SinchError", "启动失败:" + error.getMessage());
        });
    }

    @Override
    public void onClientStopped(SinchClient client) {}

    @Override
    public void onLogMessage(int level, String area, String message) {}

    @Override
    public void onRegistrationCredentialsRequired(SinchClient client, ClientRegistration registrationCallback) {}
});
  1. 点击事件中添加启动状态兜底校验,同时补全通话实例赋值逻辑:
    修改按钮点击事件中的逻辑:
button.setOnClickListener(view -> {
    if (call == null) {
        // 兜底校验客户端是否启动完成
        if (!isStarted()) {
            Toast.makeText(MainActivity.this, "通话服务正在初始化,请稍后再试", Toast.LENGTH_SHORT).show();
            return;
        }
        try {
            CallClient callClient = sinchClient.getCallClient();
            // 补全call实例赋值、监听器绑定逻辑
            call = callClient.callPhoneNumber("+16315192247");
            call.addCallListener(new SinchCallListener());
            button.setText("Hang Up");
        }catch (Exception e){
            Log.d("checksinch", e.getMessage());
        }
    } else {
        call.hangup();
        call = null;
        button.setText("Call");
    }
});
附加注意事项

你当前代码中userId写死为固定值172976,如果是多用户使用场景需要替换为当前登录用户的唯一标识,否则会出现同账号互踢、启动失败的问题。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:06:03