어쨌든 타이머를 설정할 때 전화기를 다시 시작하더라도 여전히 실행될 수 있습니까? 알람 시계와 마찬가지로 전화를 다시 시작하면 여전히 거기에 있습니다. 가능하다면 그 코드를 얻을 수 있습니까? 나는 정말로 그것을 필요로한다.안드로이드 타이머 앱
답변
예, 가능하지만 현재 코드가 없습니다. 나만의 조치를 취할 수 있습니다.
단계
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>
전체 코드는 다음과 같습니다. 단계를 따라하면됩니다.
전화를 다시 시작하더라도 타이머가 계속 실행됩니까? 예를 들어 타이머에 10 분이있는 경우 5 분 남았습니다. 전화를 다시 시작합니다. 타이머가 5 분 정도입니까? –
또한 sharedPreferences 부분에 대해 자세히 설명 할 수 있습니까? 그것은 내가 코드에서 이해하지 못했던 유일한 것입니다. –
@GlennMichaelTorregosa 예. 브로드 캐스트 수신기가 호출되는 전화를 다시 시작하면 타이머가 다시 시작됩니다. 그리고 sharedPreferences는 데이터 저장 시스템입니다. 데이터를 저장하고 액세스 할 수 있습니다. –
알람 작동으로 인해 원하는 것을 달성하기 위해 CalendarEvent를 추가 했으므로 타이머가 언제 시작되고 이벤트가 추가되는지에 따라 계산해야합니다. 자세한 내용은 [여기] (https : //developer.android.com/training/scheduling/alarms.html) –