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