我怎么做,它会说的文本语音只有一次逻辑

本文关键字:一次 语音 文本 | 更新日期: 2023-09-27 18:11:31

在c#的pc上,这是web服务器,我有这部分:

private void cases()
{
    if (request.QueryString[0] == "uploadstatus")
                    {
                        switch (Youtube_Uploader.fileuploadstatus)
                        {
                            case "uploading file":
                                return "uploading";
                            case "file uploaded successfully":
                                Youtube_Uploader.fileuploadstatus = "";
                                return "upload completed";
                            default:
                                return "upload unknown state";
                        }
                    }
}

然后我有在客户端java使用android studio这个代码:

Runnable serverChecksRunnable = new Runnable()
    {
        @Override
        public void run()
        {
            if (connectedSuccess == true)
            {
                checkServer = Get(iptouse + "uploadstatus");
            }
            Handler h=new Handler(Looper.getMainLooper());
            h.post(new Runnable()
            {
                @Override
                public void run()
                {
                    if (connectedSuccess)
                    {
                        if (checkServer != null)
                        {
                            String a = null;
                            try
                            {
                                a = new String(checkServer, "UTF-8");
                                textforthespeacch = a;
                                if (textforthespeacch.equals("upload completed"))
                                    MainActivity.this.initTTS();
                                if (textforthespeacch.equals("uploading"))
                                {
                                    servercheckCounter += 1;
                                    if (servercheckCounter == 1)
                                    {
                                        MainActivity.this.initTTS();
                                    }
                                }

                                servercheckCounter = 0;
                            } catch (UnsupportedEncodingException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            });
            customHandler.postDelayed(serverChecksRunnable,1000);
        }
    };

每秒钟向web服务器发送一个命令:

checkServer = Get(iptouse + "uploadstatus");

回到pc,这是工作部分:web服务器当我的情况是"文件上传成功",然后重置变量Youtube_Uploader。Fileuploadstatus = ";如果是空字符串,结果是返回"upload completed";一次。

问题是在上传的时候。当情况是:"上传文件"在web服务器上,它一直说每秒钟"上传",但我希望它会说"上传"也只有一次。

我也试着这样重置变量:

                        case "uploading file":
                        Youtube_Uploader.fileuploadstatus = "";
                        return "uploading";

但是它每秒都在说"上传"。我尝试在java客户端代码中进行一些检查:

if (textforthespeacch.equals("upload completed"))
                                    MainActivity.this.initTTS();
                                if (textforthespeacch.equals("uploading"))
                                {
                                    servercheckCounter += 1;
                                    //if (servercheckCounter == 10)
                                    //{
                                    if (servercheckCounter == 1)
                                    {
                                        MainActivity.this.initTTS();
                                    }
                                    //  servercheckCounter = 0;
                                    //}
                                }

所以如果它完成了,它工作得很好,只说一次。但是当它在上传的时候,它每秒都在说"上传"。

另一个问题可能是我第一次想要它说"上传"每10秒,但web服务器可能在10秒之前上传它。

所以我找不到正确的逻辑,也不知道如何使它工作。我想让每个状态显示一次:

"上传"

"上传完成"

但是我不能让它只说一次每个状态的情况

我怎么做,它会说的文本语音只有一次逻辑

解决这个问题的最简单的方法是简单地保持一个布尔状态,告诉是否已经说过"上传"。确保在开始上传时将该状态重置为false,然后,每当"上传"状态到达时,检查布尔值。像这样:

private Boolean uploadAnnounceDone = false;
private void checkUpload()
{
    String status = cases();
    if (status.Equals("uploading"))
    {
        if (!uploadAnnounceDone)
        {
            uploadAnnounceDone = true;
            PlayVoice(status);
        }
    }
    else
        PlayVoice(status);
}

如果您在多次上传中重用相同的设置,请确保在开始另一次上传时将布尔值重置为False。

请注意,当前,你的代码是无效的;"cases()"函数应该返回该字符串。将其返回类型设置为void