我的警报服务运行了几次而不是实际运行时间

时间:2013-12-02 07:04:20

标签: android service notifications alarmmanager alarm

我有一个与闹钟管理器配合使用的闹钟服务。当您为以后设置闹钟时,它可以正常工作。但是当你把它设置为过去时(你想明天提醒你)它会变得疯狂并且多次警告而不是一次,最后不会明天工作。 有人帮我解决这个问题。

我喜欢这样:我有一个警报课。当我创建它时,它会产生一个与警报管理器一起运行服务的待定意图。该服务将打开我的活动。

这是错误的方式吗?

这是我的警报类:

public class MyAlarm  {

    private Context myContext;
    private NotificationManager mNM;
    private int NOTIFICATION = 10002; //Any unique number for this notification

    MyAlarm(Context myAct){



        myContext = myAct;
        showNotification();





    }
     // this constractor is for cancelling alarm

    MyAlarm(Context myAct, String str) {
        myContext = myAct;
        cancelPendigIntent();
    }

    private void cancelPendigIntent() {


        //Intent myIntent = new Intent(myContext, MyAlarmService.class);
        //G.pendingIntent = PendingIntent.getService(myContext, 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        //G.pendingIntent.cancel();
        //G.alarmManager.cancel(G.pendingIntent);

    }

    private void showNotification() {



         Intent myIntent = new Intent(myContext, MyAlarmService.class);
         G.pendingIntent = PendingIntent.getService(myContext, 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
         G.alarmManager = (AlarmManager)myContext.getSystemService(Context.ALARM_SERVICE);
         G.calendar = Calendar.getInstance();

         int to_day= G.calendar.get(Calendar.DATE);
         int to_mounth= G.calendar.get(Calendar.MONTH);
         int to_year= G.calendar.get(Calendar.YEAR);
         G.calendar.set(to_year, to_mounth, to_day, Integer.parseInt(G.myPref.loadString("alert_time_houre")), Integer.parseInt(G.myPref.loadString("alert_time_mins")), 0);
         Log.i("LOG", "alert_time_houre="+G.myPref.loadString("alert_time_houre")+"  alert_time_mins="+G.myPref.loadString("alert_time_mins"));
         G.alarmManager.setRepeating(AlarmManager.RTC, G.calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, G.pendingIntent);




    }

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。

我的问题不在于报警管理器。 我将pendig意图设置为打开活动的服务。问题是当服务在后台运行时,它一次又一次地打开我的活动,我的应用程序变得疯狂。也许我应该在完成一次工作后销毁服务。

我将它从服务更改为broadcastreceiver并且它正常工作。

感谢指南:)