2017-01-10 42 views
1

無論如何,當我設置計時器時,即使重新啓動手機,它仍會運行?像鬧鐘一樣,當我重新啓動手機時,它仍然在那裏。如果有可能我可以得到它的代碼?我真的需要它。Android定時器應用程序

+0

報警工作原因把它添加一個CalendarEvent,你想實現什麼,你需要時,計時器需要計算到雲上取決於當它開始和添加事件,看看[這裏](HTTPS: //developer.android.com/training/scheduling/alarms.html) –

回答

2

是的,你可以做到這一點,但目前我還沒有代碼。 我可以給你製作你自己的步驟。

步驟

1在您的活動創建CountDownTimer

  // 10 minutes Timer And 1 Second Delay 
      new CountDownTimer(10*30*1000, 1000) { 

       public void onTick(long millisUntilFinished) { 
        // save `millisUntilFinished` to sharedpreferences 
       } 

       public void onFinish() { 

        // clear sharedPreferences when it finished 
        //and do whatever you want after finishing the timer here 
       } 
      }.start(); 

2 - 創建一個BroadCastReceiverBOOT_COMPLETED行動與上次保存的值重新啓動定時器從Sharedpreferences

@Override 
public void onReceive(Context context, Intent intent) { 

    //again Start your timer from here 

    // Get millisUntilFinished from SharedPreference 
    millisUntilFinished = Long.parseLong(getLastSavedValueFromSharedPreferences()); 

    new CountDownTimer(millisUntilFinished, 1000) { 

     public void onTick(long millisUntilFinished) { 
      // save `millisUntilFinished` to sharedpreferences 
     } 

     public void onFinish() { 

      // clear sharedPreferences when it finished 
      // and do whatever you want after finishing the timer here 
     } 
    }.start(); 
} 

就是這樣。

EDIT

步驟1-創建TestActivity.java

public class TestActivity extends AppCompatActivity { 

    SharedPreferences sharedPreferences; 
    SharedPreferences.Editor editor; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.test_work); 

     sharedPreferences = getSharedPreferences("MySharedPref", MODE_PRIVATE); 
     editor = sharedPreferences.edit(); 

     startTimer(); 

    } 

    private void startTimer() { 

     // 10 min Timer 
     new CountDownTimer(10*60*1000, 1000) 
     { 
      @Override 
      public void onTick(long millisUntilFinished) { 

       editor.putLong("millisUntilFinished", millisUntilFinished); 
       editor.commit(); 
      } 

      @Override 
      public void onFinish() { 

       editor.clear(); 
       // Do your work Here 
      } 
     }.start(); 
    } 
} 

步驟2-創建BootReceiver.java

public class BootReceiver extends BroadcastReceiver { 

    SharedPreferences sharedPreferences; 
    SharedPreferences.Editor editor; 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 

     sharedPreferences = context.getSharedPreferences("MySharedPref", context.MODE_PRIVATE); 
     editor = sharedPreferences.edit(); 

     startTimer(); 
    } 

    private void startTimer() { 

     // get remaining time from sharedPreferences 
     long millisUntilFinished = sharedPreferences.getLong("millisUntilFinished", 0); 

     // 10 min Timer 
     new CountDownTimer(millisUntilFinished, 1000) 
     { 
      @Override 
      public void onTick(long millisUntilFinished) { 

       editor.putLong("millisUntilFinished", millisUntilFinished); 
       editor.commit(); 
      } 

      @Override 
      public void onFinish() { 

       editor.clear(); 
       // Do your work Here 
      } 
     }.start(); 
    } 
} 

步驟3-在AndroidManifest.xml文件註冊你的接收機

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<!--Register your BootReceiver here--> 
    <receiver android:name=".receiver.BootReceiver"> 
     <intent-filter > 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

以下是完整的代碼。你只需要按照步驟。

+0

即使我重新啓動手機,計時器仍會繼續運行嗎?例如,我有10分鐘的計時器,然後我只剩下5分鐘,然後重新啓動手機。計時器是否仍然在5分鐘? –

+0

也可以詳細說明sharedPreferences部分嗎?這是我從代碼中不能理解的唯一的東西。 –

+0

@GlennMichaelTorregosa是的,當您重新啓動手機時,您的廣播接收器將會被呼叫,您的計時器將重新開始。 而sharedPreferences是數據存儲系統。它允許您存儲和訪問您的數據。 –

相關問題