我正在运行一个线程,它在 textView.EG:30,29,28,27... 中显示 30 秒...等到 0 秒。所以当它达到 0 秒时,一条消息将发送到带有定义消息的定义数字.
我的问题是,即使我在两者之间停止线程并且它显示它已经停止;仍然是方法sendTextMessageAlert(); 以某种方式调用并发送短信。在我的编码中执行以下操作:
uiPost = new Handler();
running = true;
timerThread=new Thread(new Runnable() {
int i;
@Override
public void run() {
// TODO Auto-generated method stub
for( i=30;i>=0;i--)
{
if(running)
{
uiPost.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
setTimerText(i);
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else
{
timerThread.stop();
end();
//Intent iii=new Intent(Alert.this,FearAlert.class);
//startActivity(iii);
}
}
}//run end
});
timerThread.start();
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//timerThread.stop();
running=false;
// endAlert();
Toast.makeText(getApplicationContext(), "By Button,Monitoring Stopped", 0).show();
}
});
}
public void end(){
vibrator.cancel();
this.locationManager.removeUpdates(this);
if(wakeLock.isHeld())
wakeLock.release();
finish();
}
private void setTimerText(int i)
{
((TextView)findViewById(R.id.TextView03)).setText(String.valueOf(i) + "s");
if(i==0)
{
running=false;
sendTextMessageAlert();
vibrator.cancel();
this.locationManager.removeUpdates(this);
if(wakeLock.isHeld())
wakeLock.release();
finish();
}
}
private void sendTextMessageAlert() {
// TODO Auto-generated method stub
SendSMS task=new SendSMS();
task.startSMS();
}
class SendSMS
{
SharedPreferences myPrefs = getSharedPreferences("FearAlert", 1);
String contactNumber1 = myPrefs.getString("contactNumber1", number);
public void startSMS() {
// TODO Auto-generated method stub
SmsManager.getDefault().sendTextMessage(contactNumber1,
null,
getSharedPreferences("FearAlert", 1).getString("message",getString( R.string.default_emergency_message)+sss),
null, null);
}
M 使用布尔运行来检查和停止线程。请帮助我,为什么当我按下按钮 B1时仍然调用 sendTextMessageAlert?任何解决方案..提前谢谢...