1

Я новичок в этом, поэтому я немного потерян.Аварийный менеджер не запускает

Я создал уведомление и передал его диспетчеру сигнализации в качестве ожидающего пользователя, однако вместо того, чтобы ждать интервала для запуска тревоги и отображения уведомления, уведомление немедленно отображается. Что я сделал неправильно, что не позволяет настроить будильник правильно?

public class NotificationController{ 

Context context; 

public void createNotification(Context context){ 

    this.context = context; 
    Notification notification = getNotification(); 

    //creates notification 
    Intent intent = new Intent(context, NotificationReceiver.class); 
    intent.putExtra(NotificationReceiver.NOTIFICATION_ID, 1); 
    intent.putExtra(NotificationReceiver.NOTIFICATION, notification); 
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

    //schedules notification to be fired. 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 10000 , pIntent); 

} 


private Notification getNotification(){ 

    Intent intent = new Intent(context, MainActivity.class); 
    PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); 

    Notification.Builder builder = new Notification.Builder(context) 
      .setContentTitle("Reminder") 
      .setContentText("Car service due in 2 weeks") 
      .setSmallIcon(R.drawable.ic_launcher) 
      .setContentIntent(pIntent); 
    return builder.build(); 
} 
} 

мой приемник

public class NotificationReceiver extends BroadcastReceiver { 

public static String NOTIFICATION_ID = "notification-id"; 
public static String NOTIFICATION = "notification"; 

public void onReceive(Context context, Intent intent) { 

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

    Notification notification = intent.getParcelableExtra(NOTIFICATION); 
    int id = intent.getIntExtra(NOTIFICATION_ID, 0); 

    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(id, notification); 

} 
} 

Я также зарегистрирован <receiver android:name=".NotificationReceiver" > в AndroidManifest.

+0

Просьба опубликовать ваш манифест, чтобы пользователи могли проверить, если все разрешения есть и правильный .. – Makwana

ответ

3

В этой строке

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 10000 , pIntent); 

Вы указываете, что сигнал должен стрелять в течение 10 секунд после того, как устройство перезагрузится (это в прошлом, так что аварийные пожары немедленно). Если вы хотите 10 секунд после того, как вы установите сигнализацию, вы используете количество миллисекунд, прошедших после того, как устройство перезагрузится PLUS 10 секунд:

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() + 10000 , pIntent); 
+2

Спасибо! По какой-то причине мне пришлось использовать 'AlarmManager.RTC_WAKEUP' вместо этого, но моей главной проблемой был промежуток, который был в прошлом, как вы сказали. –

+0

следует использовать 'SystemClock.elapsedRealtime()' для 'AlarmManager.ELAPSED_REALTIME [_WAKEUP]' alram и 'System.currentTimeMillis()' для 'AlarmManager.RTC [_WAKEUP]' –

1

Попробуйте это:

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis()+10000 , pIntent); 
0

Для меня старые методы убийства через несколько часов. Посмотрите мой код, который я использую для разных версий ОС. Может быть полезно.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 

     AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(alarmTime, pendingIntent); 
     alarmManager.setAlarmClock(alarmClockInfo, pendingIntent); 
    } 
    else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 

     alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent); 
    } 
    else { 

     alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent); 
    } 

Благодаря Аршад

 Смежные вопросы

  • Нет связанных вопросов^_^