android — Невозможно установить повторную тревогу во время загрузки" />

Невозможно установить повторную тревогу во время загрузки

Я получил уведомление в 22:30. Но когда мое устройство выключается в 22:30, а затем после того, как я включаю свое устройство в 23:00, я не получаю ожидающего уведомления. Так что я не понимаю, в чем проблема. любая помощь будет оценена.

Вот мой код в действии по созданию.

    Intent alarmIntent = new Intent(CH_Dashboard.this,  TimeAlarmEvening.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(CH_Dashboard.this, 0, alarmIntent, 0);

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

    Calendar firingCal = Calendar.getInstance();
    Calendar currentCal = Calendar.getInstance();

    firingCal.set(Calendar.HOUR, 10);
    firingCal.set(Calendar.MINUTE, 30);
    firingCal.set(Calendar.SECOND, 0);
    firingCal.set(Calendar.AM_PM,Calendar.PM);

    long intendedTime = firingCal.getTimeInMillis();
    long currentTime = currentCal.getTimeInMillis();

    if(intendedTime >= currentTime)
    {
        manager.setRepeating(AlarmManager.RTC,
                intendedTime, AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }
    else
    {
        firingCal.add(Calendar.DAY_OF_MONTH, 1);
        intendedTime = firingCal.getTimeInMillis();

        manager.setRepeating(AlarmManager.RTC,
                intendedTime, AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }

Мой код Receiver находится здесь и успешно получает уведомление, когда устройство включено.

        Intent notificationIntent = new Intent(context, CH_Dashboard.class);
        notificationIntent.putExtra("fromNotification","notify");
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        stackBuilder.addParentStack(CH_Dashboard.class);
        stackBuilder.addNextIntent(notificationIntent);

        PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

        builder.setAutoCancel(true);

        Notification notification = builder.setContentTitle("Demo App Notification")
                .setContentText("New Notification From Demo App..")
                .setTicker("New Message Alert!")
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentIntent(pendingIntent).build();

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notification);

вот мой код получателя загрузки.

    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
    {
     Intent alarmIntent = new Intent(context, TimeAlarmEvening.class);
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);

    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    Calendar firingCal = Calendar.getInstance();
    Calendar currentCal = Calendar.getInstance();

    firingCal.set(Calendar.HOUR, 10);
    firingCal.set(Calendar.MINUTE, 30);
    firingCal.set(Calendar.SECOND, 0);
    firingCal.set(Calendar.AM_PM,Calendar.PM);

    long intendedTime = firingCal.getTimeInMillis();
    long currentTime = currentCal.getTimeInMillis();

    if(intendedTime >= currentTime)
    {
        manager.setInexactRepeating(AlarmManager.RTC,
                intendedTime, AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }
    else
    {
        firingCal.add(Calendar.DAY_OF_MONTH, 1);
        intendedTime = firingCal.getTimeInMillis();

        manager.setInexactRepeating(AlarmManager.RTC,
                intendedTime, AlarmManager.INTERVAL_DAY,
                pendingIntent);
    }

  }

И последний в декларации я объявил получателем.

     <receiver
        android:name=".model.AutoStart"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

    <receiver android:name=".TimeAlarmEvening">
        <intent-filter>
            <action android:name="android.media.action.DISPLAY_NOTIFICATION_EVENING" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
7 голосов | спросил Akash Patel 17 MaramThu, 17 Mar 2016 09:18:28 +03002016-03-17T09:18:28+03:0009 2016, 09:18:28

2 ответа


0

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

 <receiver
    android:name=".model.AutoStart"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<receiver android:name=".TimeAlarmEvening">
    <intent-filter>
        <action android:name="android.media.action.DISPLAY_NOTIFICATION_EVENING" />
    </intent-filter>
</receiver>
ответил Akash Patel 11 J0000006Europe/Moscow 2016, 10:24:48
0

Я не пишу весь код для вас. Но я могу показать вам, где вы можете применить свою логику.

- > Во-первых, найдите способ отслеживать себя, что пропущено, например, отслеживать состояние события в базе данных.

- > Затем установите BOOT_COMPLETED BroadcastReceiver для найти при перезагрузке телефона. Там запланируйте любые сигналы тревоги, которые все еще находятся в будущем, и решите, что делать с сигналами тревоги, которые произошли в прошлом, но были пропущены (например, подайте Уведомление, указывающее на пропущенные события).

- Один из способов сделать это - прослушать событие отключения телефона:

<action android:name="android.intent.action.ACTION_SHUTDOWN" />

и перед тем, как устройство выключится, сохраните время выключения.

Затем прослушайте загрузку устройства:

<action android:name="android.intent.action.BOOT_COMPLETED" />

и напишите свою собственную логику, которая определяет, какие аварийные сигналы сработали бы во время этого простоя, и немедленно активируйте эти аварийные сигналы с AlarmManager.

ответил Srujan Barai 18 MarpmFri, 18 Mar 2016 12:58:16 +03002016-03-18T12:58:16+03:0012 2016, 12:58:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132