我是stackoverflow的新手。我创建了一个简单的蓝牙应用程序来控制中继板。
继电器是";关于";单击按钮后持续1s。到目前为止,它是有效的,但如果我在1秒内点击按钮,继电器就会"关闭";关于";再持续1秒。
所以我想在继电器处于"关闭"状态时禁用按钮;在"上";。我用过.postDelayed((。这同样有效,但不可能在.postDelayed((例程中生成outputStream来清除中继。
有人给我一个主意吗?
问候Joe
// Rel1 btn click
mRel1Btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
mRel1Btn.setEnabled(false);
mRel1Btn.setClickable(false);
if (mBlueAdapter.isEnabled()) {
try {
OutputStream mOutputStream = mBtSocket.getOutputStream();
mOutputStream.write(RELAY_ON);
new Handler().postDelayed(new Runnable()
{
public void run()
{
mRel1Btn.setEnabled(true);
mRel1Btn.setClickable(true);
mOutputStream.write(RELAY_OFF); // sending bytes to serial COM (BT)
}
}, 1000 //Specific time in milliseconds
);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
出现以下错误
错误:未报告的异常IOException;必须被捕获或宣布抛出
mOutputStream.write(RELAY_OFF(;(左括号上的标记(
已解决:
我创建了一个子程序";sendMessage(消息(";并从我的监听器中调用了这个子程序。
// Rel1 btn click
mRel1Btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
if (mBlueAdapter.isEnabled()) {
sendMessage(RELAY1_JDY30_ON);
mRel1Btn.setEnabled(false);
mRel1Btn.setClickable(false);
new Handler().postDelayed(new Runnable()
{
public void run()
{
sendMessage(RELAY1_JDY30_OFF);
mRel1Btn.setEnabled(true);
mRel1Btn.setClickable(true);
}
}, 1000 //Specific time in milliseconds
);
}
}
});
.
.
.
private void sendMessage(byte[] message) {
OutputStream mOutputStream;
try {
mOutputStream = mBtSocket.getOutputStream();
mOutputStream.write(message);
} catch (IOException e) {
e.printStackTrace();
}
}