Android: после установки уведомления на устройство выдает уведомление каждый раз без сообщения, когда я перезагружаю устройство? - PullRequest
0 голосов
/ 12 января 2012

В моем приложении я устанавливаю Уведомление, как показано ниже:

    // for the PAYE 18 APRIL 2011 // 1  
    AM_EM_APRIL_2011 = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    Intent in1 = new Intent(this, AlarmReceiverNotificationForEveryMonth.class);
    in1.putExtra("MyMessage","Your PAYE return is DUE on 20th April 2011.");
    PI_EM_APRIL_2011 = PendingIntent.getBroadcast(this, 1, in1, PendingIntent.FLAG_UPDATE_CURRENT);
    Calendar calendar_PAYE_18_APRIL_2011 = Calendar.getInstance();
    calendar_PAYE_18_APRIL_2011.setTimeInMillis(System.currentTimeMillis());
    calendar_PAYE_18_APRIL_2011.set(2011, 3, 18,mHour, mMinute, 0);
    AM_EM_APRIL_2011.set(AlarmManager.RTC_WAKEUP, calendar_PAYE_18_APRIL_2011.getTimeInMillis(),PI_EM_APRIL_2011);

Класс широковещания для уведомления:

public class AlarmReceiverNotificationForTwoMonth extends BroadcastReceiver{
//private Intent intent;
private NotificationManager notificationManager;
private Notification notification;
public static CharSequence contentText;
@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

    // My Notification Code
    notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    int icon = R.drawable.app_icon;
    //System.out.println("The ID Number is: "+Long.parseLong(intent.getData().getSchemeSpecificPart()) );
    contentText = intent.getStringExtra("MyMessage");
    System.out.println("The Message is: "+intent.getStringExtra("MyMessage"));
    CharSequence text = "Your tax amount due period";
    CharSequence contentTitle = "Tax Calculator App";

    long when = System.currentTimeMillis();

    intent = new Intent(context, MenuPageActivity.class);
    intent.putExtra("twoMonth", "twoMonth");
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    notification = new Notification(icon,text,when);

    long[] vibrate = {0,100,200,300};
    notification.vibrate = vibrate;  // To vibrate the Device

    notification.ledARGB = Color.RED;
    notification.ledOffMS = 300;
    notification.ledOnMS = 300;

    notification.defaults |= Notification.DEFAULT_LIGHTS;
    //notification.flags |= Notification.FLAG_SHOW_LIGHTS;

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
    notificationManager.notify(NotificationConstants.NOTIFICATION_ID_TWO_MONTH, notification);
}

}

Все работыхорошо с этим кодом.и я получил уведомление.Но, используя это, я получал уведомления каждый раз, когда перезагружал устройство.и в этом уведомлении нет никаких сообщений.Почему так происходит ???Пожалуйста, помогите мне в этом.или что не так в моем коде ???

Спасибо. Отредактировано

Я сделал это в manifest.xml

<!-- To receive the Alarm Notification for two months-->
    <receiver android:name=".AlarmReceiverNotificationForTwoMonth" android:enabled="true">  
         <intent-filter>                 
            <action android:name="android.intent.action.BOOT_COMPLETED"/>                 
            <category android:name="android.intent.category.DEFAULT"/>             
         </intent-filter>   
    </receiver>  

1 Ответ

1 голос
/ 12 января 2012

Указан ли ваш класс AlarmReceiverNotificationForTwoMonth в манифесте в качестве получателя широковещательной передачи BOOT_COMPLETED?

Если это так, то метод AlarmReceiverNotifictionForTwoMonth.onReceive() будет запускаться каждый раз при загрузке устройства, и в результатепоказать уведомление.

РЕДАКТИРОВАТЬ: Ваш подход с использованием AlarmManager хорош.Единственная проблема заключается в том, что аварийные сигналы не восстанавливаются при перезагрузке устройства.Поэтому вам необходимо воссоздать любой существующий сигнал тревоги при перезагрузке устройства.Мое предложение было бы изменить ваш манифест следующим образом:

    <receiver android:name=".AlarmReceiverNotificationForTwoMonth" android:enabled="true" >
    </receiver>
    <receiver android:name=".RecreateAlarms" >
        <intent-filter >
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

Затем создайте новый класс

public class RecreateAlarms extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    // reschedule alarms here
}

Я не знаю вашу логику, когда должен срабатывать сигнал тревоги.Вам может потребоваться сохранить сигнал тревоги в файл / базу данных в вашем методе AlarmReceiverNotificationForTwoMonth и прочитать его в RescheduleAlarms, чтобы узнать, есть ли какие-либо тревоги для воссоздания

...