打开应用程序时闹钟一直响

Alarm keeps firing when I open the app

我创建了一个闹钟,它可以工作,但问题是,在我设置的时间之后,闹钟会在我打开应用程序的那一刻开始,有时,当关闭并且我没有打开应用程序时。这个问题困扰我好几天了,有人能帮帮我吗?

这是我的代码:

ScarsdaleHome.java

public class ScarsdaleHome extends Fragment implements OnClickListener{

private AlarmManager alarmManager;
private PendingIntent pendingIntent;

    public ScarsdaleHome() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.scarsdale_home_activity, container, false);


        Calendar calend = Calendar.getInstance();
        calend.setTimeInMillis(System.currentTimeMillis());
        calend.set(Calendar.HOUR_OF_DAY, 19);
        calend.set(Calendar.MINUTE, 31);
        calend.set(Calendar.SECOND, 00);    

        Intent myIntent = new Intent(getActivity(), MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent,0);
        alarmManager = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calend.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

        return rootView;
    }



    public static ScarsdaleHome newIstance(){
        ScarsdaleHome frag= new ScarsdaleHome();
        return frag;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
}

MyReceiver.java

public class MyReceiver extends BroadcastReceiver
{

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



         Intent service1 = new Intent(context, MyAlarmService.class);
         context.startService(service1);

    }   
}

您已调用 AlarmManager class 的 setRepeating() 方法,该方法会安排一个无论用户是否打开应用程序都会触发的重复警报。如果您只想在用户打开应用程序时启动 Service,请使用

alarmManager.set();

alarmManager.setExact();

这样做。这将安排 Service 仅在用户打开应用程序时启动。

编辑:

像这样定义你的闹钟:

if(PendingIntent.getBroadcast(getActivity(), 0, 
                           myIntent, 
                           PendingIntent.FLAG_NO_CREATE) == null){

    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent,0);
    alarmManager = (AlarmManager)getActivity().getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calend.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

}

如果已经设置了闹钟,这将不会重置闹钟。