0

textView.EG:30,29,28,27 で 30 秒を表示しているスレッドを実行しています。0 秒まで続きます。したがって、0 秒に達すると、定義されたメッセージで定義された番号にメッセージが送信されます.

私の問題は、途中でスレッドを停止しても、スレッドが停止したことを示していることです;まだメソッド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は、スレッドをチェックして停止するために実行中のブール値を使用しています。解決策..よろしくお願いします...

4

1 に答える 1

1

Thread の代わりに、CountDownTimerこのタスクを実行するために使用します。これは、stop()メソッドのThread使用が推奨されておらず、スレッドを停止してはならないためです。

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

CountDownTimercancel()タイマーをキャンセルする方法もあります

public void onTick(long millisUntilFinished)やのようなメソッドもありpublic void onFinish()、必要に応じてタスクを実行するのに役立ちます

于 2013-02-26T10:41:26.290 に答える