我怎么做,它会说的文本语音只有一次逻辑
本文关键字:一次 语音 文本 | 更新日期: 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