无法停止Android中的计时器?如何解决?

无法停止Android中的计时器?如何解决?,android,timer,countdowntimer,Android,Timer,Countdowntimer,我正在编写一个类来控制Android中的启动和停止计时器。控制器是一个将发送启动或停止值的活动。在TimerControl类中,我编写了两个用于启动和停止计时器的函数。我可以启动计时器,但我不能停止它。我怎样才能解决它?这是我的密码 //In Controller class //===========Start======== Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class); smsTim

我正在编写一个类来控制Android中的启动和停止计时器。控制器是一个将发送启动或停止值的活动。在TimerControl类中,我编写了两个用于启动和停止计时器的函数。我可以启动计时器,但我不能停止它。我怎样才能解决它?这是我的密码

//In Controller class
//===========Start========
 Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class);
 smsTimer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 smsTimer.putExtra("input_timer", "start");
 getApplicationContext().startActivity(smsTimer);
 //===========Stop========
 Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class);
 smsTimer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 smsTimer.putExtra("input_timer", "stop");
 getApplicationContext().startActivity(smsTimer);
这是我的时间控制代码

public class TimmerControl extends Activity {
    private CountDownTimer timer_SMS;
    private String TAG="TimmerControl";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        if (intent != null &&intent.getExtras() != null) {
            Bundle bundle = intent.getExtras();
            if (!bundle.getString("input_timer").equals(null)) {
                String  input_timer = bundle.getString("input_timer");                
                if(input_timer.equals("start")) {// start
                        startSMSTimer();
                }
                else if(input_timer.equals("stop")) {// stop
                    stopSMSTimer();
                }
                else{}
            }
        }
        finish();
    }
    public void startSMSTimer(){
        if (timer_SMS != null) {
            timer_SMS.cancel();
            timer_SMS = null;
        }
        timer_SMS = new CountDownTimer(100000, 20000) {
            @Override
            public void onTick(long millisUntilFinished) {               
                    long timOver = 100000 - millisUntilFinished;
                    Log.d(TAG, String.valueOf(timOver));      
            }

            @Override
            public void onFinish() { }
        };
        timer_SMS.start();
    }
    public void stopSMSTimer(){
        if (timer_SMS != null) {
            timer_SMS.cancel();
            timer_SMS = null;
        }
    }
}
发送停止意图时,您需要发送“停止”,如下所示:

//In Controller class
//===========Start========
 Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class);
 smsTimer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 smsTimer.putExtra("input_timer", "start"); // start
 getApplicationContext().startActivity(smsTimer);
 //===========Stop========
 Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class);
 smsTimer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 smsTimer.putExtra("input_timer", "stop"); // stop 
 getApplicationContext().startActivity(smsTimer);
发送停止意图时,您需要发送“停止”,如下所示:

//In Controller class
//===========Start========
 Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class);
 smsTimer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 smsTimer.putExtra("input_timer", "start"); // start
 getApplicationContext().startActivity(smsTimer);
 //===========Stop========
 Intent smsTimer = new Intent(getApplicationContext(), TimmerControl.class);
 smsTimer.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 smsTimer.putExtra("input_timer", "stop"); // stop 
 getApplicationContext().startActivity(smsTimer);
公共类TimmerControl扩展服务{
倒计时定时器;
专用广播接收机;
@凌驾
public void onCreate(){
super.onCreate();
IntentFilter IntentFilter=新的IntentFilter();
intentFilter.addAction(“开始”);
intentFilter.addAction(“停止”);
mReceiver=新广播接收器(){
@凌驾
公共void onReceive(上下文、意图){
//从意图中提取我们的信息
if(intent.getAction().equals(“start”)){
startSMSTimer();
}
if(intent.getAction().equals(“stop”)){
停止刺激器();
}
}
};
此注册表接收程序(mReceiver,intentFilter);
}
公共int onStartCommand(Intent Intent、int标志、int startId){
返回开始时间;
}
@凌驾
公共空间{
super.ondestory();
此.未注册接收人(此.mReceiver);
}
@可空
@凌驾
公共IBinder onBind(意向){
返回null;
}
public void startSMSTimer(){
如果(计时器\u SMS!=null){
定时器_SMS.cancel();
计时器\u SMS=空;
}
计时器\u SMS=新的倒计时(100000,1000){
@凌驾
公共void onTick(长毫秒未完成){
长timOver=100000毫米-未加工;
Log.e(“时间:”、“+timOver”);
}
@凌驾
公共无效onFinish(){
Log.e(“完成:,”);
}
};
定时器_SMS.start();
}
公共无效stopSMSTimer(){
如果(计时器\u SMS!=null){
定时器_SMS.cancel();
计时器\u SMS=空;
Log.e(“停止:”,“”);
}
stopSelf();
}
}        
SMSControllerActivity.java
公共类SMSControllerActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u smscontroller);
findviewbyd(R.id.btn_start).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(!isServiceRunning(TimmerControl.class))
startService(新意图(SMSControllerActivity.this,TimmerControl.class));
最终处理程序=新处理程序();
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
发送广播(新意图(“开始”);
}
}, 500);
}
});
findviewbyd(R.id.btn_stop).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
发送广播(新意图(“停止”);
}
});
;
}
私有布尔isServiceRunning(类serviceClass){
ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
对于(ActivityManager.RunningServiceInfo服务:manager.getRunningServices(Integer.MAX_值)){
if(serviceClass.getName().equals(service.service.getClassName())){
返回true;
}
}
返回false;
}
}
活动\u smscontroller.xml
公共类TimmerControl扩展服务{
倒计时定时器;
专用广播接收机;
@凌驾
public void onCreate(){
super.onCreate();
IntentFilter IntentFilter=新的IntentFilter();
intentFilter.addAction(“开始”);
intentFilter.addAction(“停止”);
mReceiver=新广播接收器(){
@凌驾
公共void onReceive(上下文、意图){
//从意图中提取我们的信息
if(intent.getAction().equals(“start”)){
startSMSTimer();
}
if(intent.getAction().equals(“stop”)){
停止刺激器();
}
}
};
此注册表接收程序(mReceiver,intentFilter);
}
公共int onStartCommand(Intent Intent、int标志、int startId){
返回开始时间;
}
@凌驾
公共空间{
super.ondestory();
此.未注册接收人(此.mReceiver);
}
@可空
@凌驾
公共IBinder onBind(意向){
返回null;
}
public void startSMSTimer(){
如果(计时器\u SMS!=null){
定时器_SMS.cancel();
计时器\u SMS=空;
}
计时器\u SMS=新的倒计时(100000,1000){
@凌驾
公共void onTick(长毫秒未完成){
长timOver=100000毫米-未加工;
Log.e(“时间:”、“+timOver”);
}
@凌驾
公共无效onFinish(){
Log.e(“完成:,”);
}
};
定时器_SMS.start();
}
公共无效stopSMSTimer(){
如果(计时器\u SMS!=null){
定时器_SMS.cancel();
计时器\u SMS=空;
Log.e(“停止:”,“”);
}
stopSelf();
}
}