2016-11-29 42 views
0

一旦計時器啓動它不能停止3小時。如果我點擊後備計時器stoped.I不知道如何暫停和恢復計時器的textview.Please檢查我的代碼。如何啓動計時器3小時,即使應用程序已關閉或從活動回來android

TextView timer; 

SharedPreferences mpref; 

SharedPreferences.Editor ed; 
String output; 
MyCount counter; 
long seconds; 

long millisFinished; 

@Override 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_start__test2); 
    mpref=getSharedPreferences("com.example.bright", Context.MODE_PRIVATE); 

     timer = (TextView) findViewById(R.id.timer); 



    //startService(new Intent(this, MyService.class)); 
    counter = new MyCount(10800000, 1000); 

    counter.start(); 


} 

countDownTimer方法

public class MyCount extends CountDownTimer { 
    Context mContext; 


    public MyCount(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
     Log.e("timeeeee", millisInFuture + ""); 
    } 


    public void onTick(long millisUntilFinished) { 
     Log.e("time",millisUntilFinished+""); 

     millisFinished = millisUntilFinished; 
     timer.setText(formatTime(millisUntilFinished)); 
    /* String timer_str = timer.getText().toString(); 
     //SharedPreferences sp= 

     ed = mpref.edit(); 
     ed.putString("time", timer_str); 
     ed.commit();*/ 

     if (seconds == 0) { 

     } 
    } 



    public void onFinish() { 
     Toast.makeText(getApplicationContext(), "Time Up", Toast.LENGTH_LONG).show(); 
    } 


} 

@Override 
protected void onResume() { 
    super.onResume(); 
    /*// Log.e("valueeeee",millisFinished+""); 
    // new MyCount(millisFinished,1000); 
    // Log.e("value",millisFinished+"");*/ 
    //counter 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    // counter.cancel(); 
} 

//================================================================================Time format 

public String formatTime(long millis) { 
    output = ""; 
    seconds = millis/1000; 
    long minutes = seconds/60; 
    long hours = minutes/60; 

    seconds = seconds % 60; 
    minutes = minutes % 60; 
    hours = hours % 60; 

    String secondsD = String.valueOf(seconds); 
    String minutesD = String.valueOf(minutes); 
    String hoursD = String.valueOf(hours); 

    if (seconds < 10) 
     secondsD = "0" + seconds; 
    if (minutes < 10) 
     minutesD = "0" + minutes; 

    if (hours < 10) 
     hoursD = "0" + hours; 

    output = hoursD + " : " + minutesD + " : " + secondsD; 

    return output; 
} 

請檢查我的代碼

回答

2

ü需要讓定時器運行,即使應用程序被關閉/銷燬使用服務。試試如下

public class TimerService extends Service { 
     private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
     private Context mContext; 

     public IBinder onBind(Intent intent) 
     { 
      return null; 
     } 

     public void onCreate() 
     { 
      super.onCreate(); 
      mContext = this; 
      startService(); 
     } 

     private void startService() 
     {   
      scheduler.scheduleAtFixedRate(runner, 0, 3, TimeUnit.HOURS); 
     } 

     final Runnable runner = new Runnable() { 
      public void run() 
      { 
       mHandler.sendEmptyMessage(0); 
      } 
     }  

     public void onDestroy() 
     { 
      super.onDestroy(); 
      Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show(); 
     } 

     private final Handler mHandler = new Handler() 
     { 
      @Override 
      public void handleMessage(Message msg) 
      { 
       //do what ever you want as 3hrs is completed 
      } 
     };  
    } 
+0

感謝.i'll嘗試 –

+0

@login錯誤在「scheduleAtFixedRate無法解析」 –

+0

我已經編輯我的答案,請看看 –

相關問題