2013-07-31 3 views
3

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

class DailyNotification extends BroadcastReceiver { 

    // Register the alarm and set it at 7am everyday (repeating mode) 
    public static void registerAlarm(Context paramContext) { 
     Calendar calendar = Calendar.getInstance(); 
     if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) { 
      calendar.add(7, 1); 
     } 
     calendar.set(Calendar.HOUR_OF_DAY, 7); 
     calendar.set(Calendar.MINUTE, 00); 
     calendar.set(Calendar.SECOND, 00); 

     // PendingIntent that will perform a broadcast 
     PendingIntent localPendingIntent = PendingIntent 
       .getBroadcast(
         paramContext, 
         22341, 
         new Intent(
           "com.bestweightmanager.example.exampledailynotification.DAILY_NOTIFICATION"), 
         PendingIntent.FLAG_UPDATE_CURRENT); 
     // Retrieve an AlarmManager to set a repeating daily alarm 
     ((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1, 
       calendar.getTimeInMillis(), 1000, 
       localPendingIntent); 
    } 
} 

manifiest файл выглядит следующим образом:

<receiver 
    android:name=".utils.DailyNotification" 
    android:process=":remote" > 
    <intent-filter> 
     <action android:name="com.bestweightmanager.example.exampledailynotification.DAILY_NOTIFICATION" /> 
     <action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" /> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

Но я не получать уведомления. Может ли кто-нибудь предложить мне, как решить эту проблему?

Кроме того, то, что есть смысл ниже кода

Calendar calendar = Calendar.getInstance(); 
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) { 
    calendar.add(7, 1); 
} 

ответ

1

Ответы на части.

1.

Заменить строку в коде

((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1, 
       calendar.getTimeInMillis(), 1000, 
       localPendingIntent); 

с этой линии:

((AlarmManager) paramContext.getSystemService(Context.ALARM_SERVICE)).setRepeating(1, 
       calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, 
       localPendingIntent); 

Вы на самом деле нужно, чтобы получить обслуживание системы - Context.ALARM_SERVICE

И вместо того, чтобы устанавливая частоту повторения до 1000 мс, вам необходимо использовать AlarmManager.INTERVAL_DAY, чтобы ежедневно запускать его в заданное время.

2.

О значении этого кода:

Calendar calendar = Calendar.getInstance(); 
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) { 
    calendar.add(7, 1); 
} 

Здесь calendar.add(7, 1) не имеет смысл для меня. Функция добавления() календаря используется для добавления заданной суммы в определенное поле Календаря, которое идентифицируется уникальным целым числом.

Если ваша строка кода calendar.add(7, 1); заменена на calendar.add(Calendar.DATE, 1);, этот код может иметь смысл. Это будет фактически проверять, что при регистрации тревоги, если текущий Час дня больше 7 (то есть текущее время дня превысило 7 часов утра), чем он установит объект календаря (который позже используется для регистрации тревоги) на 7 часов следующего дня (завтра).

3.

Также я сомневаюсь по поводу заявления в вашем файле манифеста. Вам нужно перепроверить его с помощью источника, с которого вы ссылаетесь.

В целом, структура файла манифеста для AlarmManager должен выглядеть примерно так:

<application> 

    <activity> 
     <intent-filter> 
      <action/> 

      <category/> 
     </intent-filter> 
    </activity> 

    <receiver android:name=".DailyNotification" /> 
</application> 

Надежда, что помогает.

+0

благодарит за хорошее предложение AnniJais :) –

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