2013-02-26 1 views
0

0 초까지 textView.EG:30,29,28,27...so에 30 초를 표시하는 스레드를 실행 중입니다. 그래서 언제 0 초에 도달하면 정의 된 메시지가있는 정의 된 번호로 메시지가 전송됩니다.스레드, 처리기 및 안드로이드에서 SMS 보내기

내 문제는 그 사이에 스레드를 중지하고 그것이 중지되었음을 나타내더라도 여전히 방법입니다. sendTextMessageAlert(); 어떻게 든라고하며 SMS가 전송됩니다 .. 다음과 같은 일이 내 코드에서하고 있어요 :

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 검사와의 thread.Please 날 ​​도와 정지를 실행 부울을 사용하여 여전히 sendTextMessageAlert가 된 이유 버튼 B1을 눌렀을 때 호출됩니까? 모든 솔루션 .. 사전에 감사합니다 ... 대신 스레드를 사용 CountDownTimer

답변

1

Threadstop() 방법이 사용되지 않기 때문에로이 작업을 수행 할 수 있습니다 당신은 스레드를 중단해서는 안된다.

android.os.CountDownTimer.CountDownTimer(long millisInFuture, long countDownInterval) 

CountDownTimer 또한 타이머를 취소 할 수 cancel() 방법이

또한이 당신이

를 원하는 당신의 작업을 수행하는 데 도움이 될 것입니다 public void onTick(long millisUntilFinished)public void onFinish() 같은 방법
관련 문제