Alarmmanager не работает с большими секундами - PullRequest
0 голосов
/ 07 сентября 2018

Я сделал простой сигнал тревоги с помощью alarm-manager, проблема в том, что, если вставить много секунд, он не работает во времени, которое я объявил здесь

это код

 mo = ((Integer.parseInt(mons.getText().toString())) * (30 * 24 * 60 * 60));
         we = ((Integer.parseInt(weeks.getText().toString())) * (7 * 24 * 60 * 60));
         da = ((Integer.parseInt(days.getText().toString())) * (24 * 60 * 60));
         ho = ((Integer.parseInt(hours.getText().toString())) * (60 * 60));
         mi = ((Integer.parseInt(mins.getText().toString())) * (60));

         int all = mo+we+da+ho+mi;



       Intent i = new Intent(Messages.this, Alarm.class);
       PendingIntent pd = PendingIntent.getBroadcast(getApplicationContext(), 5484, i, 0);
       AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
       am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (all*1000), pd);

и это Receiver

@Override
public void onReceive(Context context, Intent intent) {
    Toast.makeText(context,"ALarm....",Toast.LENGTH_LONG).show();
    showNotification( context);
}
private void showNotification(Context context) {
    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context,"M_CH_ID")
                .setSmallIcon(android.R.drawable.ic_dialog_alert)
                .setContentTitle("فكرنى")
                .setContentText("I think you need to do something")
                .setAutoCancel(true);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);      
    NotificationManagerCompat mNotificationManager =
    NotificationManagerCompat.from(context);
    mNotificationManager.notify(1, mBuilder.build());
}

1 Ответ

0 голосов
/ 07 сентября 2018

Если он ошибается примерно за 828 секунд (± 2 секунды, мне лень делать MWE), то при вычислении mo вы получите простое целочисленное переполнение, ср. https://dzone.com/articles/overflow-and-underflow-data

Использовать long s или делать другие вычисления (основанные на некоторых объектах даты?).

Редактировать: Мне нужно больше кофе, конечно, вы не получите его около 828 секунд, так как секунды не передаются на оценку месяца. Я все еще держу пари на целочисленном потоке, но не совсем с этим значением и переменной.

...