2017-01-10 14 views
1

어쨌든 타이머를 설정할 때 전화기를 다시 시작하더라도 여전히 실행될 수 있습니까? 알람 시계와 마찬가지로 전화를 다시 시작하면 여전히 거기에 있습니다. 가능하다면 그 코드를 얻을 수 있습니까? 나는 정말로 그것을 필요로한다.안드로이드 타이머 앱

+0

알람 작동으로 인해 원하는 것을 달성하기 위해 CalendarEvent를 추가 했으므로 타이머가 언제 시작되고 이벤트가 추가되는지에 따라 계산해야합니다. 자세한 내용은 [여기] (https : //developer.android.com/training/scheduling/alarms.html) –

답변

2

예, 가능하지만 현재 코드가 없습니다. 나만의 조치를 취할 수 있습니다.

단계

1

  // 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가 BOOT_COMPLETED있는 BroadCastReceiver 액션

@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(); 
} 
된 SharedPreferences

에서 마지막으로 저장된 값을 다시 타이머를 시작 만들기 활동에 CountDownTimer 만들기

그게 전부 야.

편집

단계 1 - 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 만들기 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를 만들기 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는 데이터 저장 시스템입니다. 데이터를 저장하고 액세스 할 수 있습니다. –