Как показать оставшееся время для звонка будильника с помощью AlarmManager? - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу знать, как я могу показать время, оставшееся до звонка будильника. И я также хочу знать, как мы можем увеличить / изменить значение переменной другого класса из другого класса. Предположим, у меня есть игра, в которой пользователи получают жизнь каждый день в 12 часов. Итак, как я могу предоставить жизнь пользователям, использующим AlarmManager.

Вот мой код для MainActivity

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView textView = findViewById(R.id.timeRemain);
        long timeRemaining;
        final TimePicker timePicker = findViewById(R.id.timepicker);

        findViewById(R.id.alarm).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Calendar calendar = Calendar.getInstance();

                if (Build.VERSION.SDK_INT >= 23) {
                    calendar.set(
                            calendar.get(Calendar.YEAR),
                            calendar.get(Calendar.MONTH),
                            calendar.get(Calendar.DAY_OF_MONTH),
                            timePicker.getHour(),
                            timePicker.getMinute(),
                            0
                    );
                }else {
                    calendar.set(
                            calendar.get(Calendar.YEAR),
                            calendar.get(Calendar.MONTH),
                            calendar.get(Calendar.DAY_OF_MONTH),
                            timePicker.getCurrentHour(),
                            timePicker.getCurrentMinute(),
                            0
                    );
                }
                setAlarm(calendar.getTimeInMillis());
            }
        });
    }

    private void setAlarm(long timeInMillis) {
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, Alarm.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        alarmManager.setRepeating(AlarmManager.RTC,  timeInMillis, AlarmManager.INTERVAL_DAY,
                pendingIntent);
        Toast.makeText(this,"Alarm is Set", Toast.LENGTH_SHORT) .show();
    }
}

Мой класс alarmReciever

public class Alarm extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    MediaPlayer mediaPlayer = MediaPlayer.create(context, Settings.System.DEFAULT_RINGTONE_URI);
    mediaPlayer.start();
}

}

Есть предложения? Заранее спасибо.

1 Ответ

0 голосов
/ 21 февраля 2020

Я нашел ответ. мы можем использовать CountdownTimer, чтобы найти оставшееся время.

Вот код:

    long total = calendar.getTimeInMillis();
    diff = total-System.currentTimeMillis();
    countDownTimer = new CountDownTimer(diff, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {

            diff = millisUntilFinished;
            int minutes = (int) (diff/1000) / 60;
            int seconds = (int) (diff/1000) %60;
            textView.setText("TIme Remain:" + minutes + ":" + seconds);
        }

        @Override
        public void onFinish() {

            textView.setText("00:00");
        }
    }.start();
...