首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么repeatingAlarm只运行一次

为什么repeatingAlarm只运行一次
EN

Stack Overflow用户
提问于 2015-05-28 06:47:20
回答 1查看 85关注 0票数 0

我正在忙着重复警报。问题是,我的重复警报只运行一次,只在规定的时间,而不是重复在第二天时间。如果是2015年5月28日,时间是下午1点40分,我把闹钟设置为8:30,那么它应该每天早上8:30重复,但问题是,它在2015年5月29日上午8:30运行,但不会在2015年5月30日上午8:30继续运行。这里是我的代码:

代码语言:javascript
复制
 if(AM_PMSet!=null)
{

    Calendar gcClone = Calendar.getInstance();
    Calendar gc = (Calendar) gcClone.clone();
    //Log.e("-------------------","---"+hourSet);
    gc.set( Calendar.HOUR_OF_DAY, hourSet );
    gc.set( Calendar.MINUTE, minuteSet);
    gc.set( Calendar.SECOND, 0 );
    gc.set( Calendar.MILLISECOND, 0 );


    if(gc.compareTo(gcClone) <= 0){
        //Today Set time passed, count to tomorrow
        gc.add(Calendar.DATE, 1);
    }


    if(repeatBool==true){

        long timeToAlarm = gc.getTimeInMillis();



        PendingIntent pendingIntent;
        Intent myIntent = new Intent(AyatRuqyaActivity.this, MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(AyatRuqyaActivity.this, RQS_1, myIntent,PendingIntent.FLAG_UPDATE_CURRENT);



        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, gc.getTimeInMillis(), pendingIntent);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeToAlarm,24*60*60*1000, pendingIntent);

        settings = getSharedPreferences(PREFS_NAME, 0);
        settings.edit().putBoolean("setAlarm", true).commit();
        settings.edit().putInt("setAlarmHour", hourSet).commit();
        settings.edit().putInt("setAlarmMinute", minuteSet).commit();
        settings.edit().putInt("setRepeating", 1).commit();




    }else if(repeatBool==false){


        PendingIntent pendingIntent;
        Intent myIntent = new Intent(AyatRuqyaActivity.this, MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(AyatRuqyaActivity.this, RQS_1, myIntent,PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, gc.getTimeInMillis(), pendingIntent);


        settings = getSharedPreferences(PREFS_NAME, 0);
        settings.edit().putBoolean("setAlarm", true).commit();
        settings.edit().putInt("setAlarmHour", hourSet).commit();
        settings.edit().putInt("setAlarmMinute", minuteSet).commit();
        settings.edit().putInt("setRepeating", 0).commit();

    }



}

在我的接收类中,我正在调用一个服务

代码语言:javascript
复制
public void onReceive(Context context, Intent intent)
{


    playIntent = new Intent(context, MusicService.class);
    playIntent.putExtra("width", 0);
    playIntent.putExtra("height", 0);
    playIntent.putExtra("densitydpi", 0);
    playIntent.putExtra("fromMyReceiver", "true");

    context.startService(playIntent);


}

流形

代码语言:javascript
复制
    <service
            android:name=".MusicService"
            android:enabled="true" />
       <receiver android:name=".MyReceiver"
android:process="remote" />
EN

回答 1

Stack Overflow用户

发布于 2015-05-28 07:05:34

每天晚上12点打电话

代码语言:javascript
复制
Calendar currentCalendar = Calendar.getInstance();
    Calendar todaysCalendar = Calendar.getInstance();
    todaysCalendar.setTime(getDate());
    Calendar nextDayCalandar = Calendar.getInstance();
    nextDayCalandar.setTimeInMillis(todaysCalendar.getTimeInMillis()
            + (3600000 * 24));

    long time = Calendar.getInstance().getTimeInMillis()
            + (nextDayCalandar.getTimeInMillis() - currentCalendar.getTimeInMillis());

    Intent myIntent = new Intent(HomeActivity.this, MyReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(HomeActivity.this, 0, myIntent, 0);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
    {
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, 3600000 * 24, pendingIntent);
    }
    else
    {
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 3600000 * 24, pendingIntent);
    }

支持方法

代码语言:javascript
复制
@SuppressLint("SimpleDateFormat")
private Date getDate()
{
    SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
    try
    {
        return format.parse(format.format(new Date()));
    }
    catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return new Date();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30499111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档