アプリが開いているかどうかに関係なく実行される countDownTimer を制御するボタンを持つアプリを作成しています。タイマーが終了すると、ステータス バーに通知がポップアップ表示され、ユーザーに別のアクティビティを開始するよう促します。このタイマーは、x 回の間隔を増やしながら繰り返します。また、ユーザーが誤ってタイマーを複数回開始するのを防ぐために、最初に押した後にボタンを無効にします。カウントダウンの繰り返しサイクルが終了すると、ボタンが再び有効になります。
アクティビティを開いたままにしておくと、すべて正常に機能します...
私の問題は、BACKを押したときです。アクティビティを再度開くと、カウントダウン サイクルの終了後にボタンが再び有効になりません。アクティビティが破棄されると、変数「カウント」の状態が失われると思います。
私はプログラミングにまったく慣れていないので、助けていただければ幸いです。このコードがどれほど厄介であるかをお詫びします。それはまだ非常に進行中の作業です。前もって感謝します!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startB = (Button) this.findViewById(R.id.button);
startB.setOnClickListener(this);
countDownTimer = new MyCountDownTimer(times[count], interval);
LoadPreferences();
if (savedInstanceState !=null)
{
count = savedInstanceState.getInt("mCount");
}
else
{
count=0;
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
savedInstanceState.putInt("mCount", count);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onBackPressed(){
SavePreferences();
super.onBackPressed();
}
private void SavePreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("mCount", mCount);
editor.putBoolean("state", startB.isEnabled());
editor.commit();
}
private void LoadPreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
int mCount = sharedPreferences.getInt("count", mCount);
Boolean state = sharedPreferences.getBoolean("state",true);
startB.setEnabled(state);
mCount = count
}
public void onClick(View v)
{
if (!timerHasStarted)
{
countDownTimer.start();
timerHasStarted = true;
Toast t= Toast.makeText(this,"Timer Started", Toast.LENGTH_SHORT);
t.show();
}
else
{
startB.setEnabled(false);
}
}
// CountDownTimer class
public class MyCountDownTimer extends CountDownTimer
{
public MyCountDownTimer(long startTime, long interval)
{
super(startTime, interval);
}
@Override
public void onFinish()
{
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getBaseContext())
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("ASL Teacher")
.setContentText("Play Lesson One");
//Intent resultIntent= new Intent();
//TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this);
//stackBuilder.addParentStack(NextActivity.class);
//stackBuilder.addNextIntent(resultIntent);
//PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
//mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(0, mBuilder.build());
Vibrator v= (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(pattern,-1);
// トースト t= Toast.makeText(getApplicationContext(),"Times Up "+String.valueOf(times[count]),Toast.LENGTH_SHORT); // t.show(); カウント++;
if (count < 3)
{
countDownTimer = new MyCountDownTimer(times[count], interval);
countDownTimer.start();
}
else
{
count=0;
startB.setEnabled(true);
timerHasStarted=false;
}
}