代码之家  ›  专栏  ›  技术社区  ›  Nicolae Stroncea

多次接收报警意图

  •  0
  • Nicolae Stroncea  · 技术社区  · 8 年前

    我需要我的警报每天上午11点启动一次,并更新我的所有小工具。当我用一个小部件测试我的应用程序时,onReceive()方法会在时间到达时多次激发,每次都更新我的小部件。为什么会这样?

    这是我的代码:

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        theAppWidgetManager = appWidgetManager;
        // There may be multiple widgets active, so update all of them
        for (int appWidgetId : appWidgetIds) {
            ...
        }
        scheduleNextUpdate(context);
    }
    
    @Override
    public void onReceive(Context context, Intent intent){
        if (intent.getAction().equals(ACTION_SCHEDULED_UPDATE)) {
            AppWidgetManager manager = AppWidgetManager.getInstance(context);
            int[] ids = manager.getAppWidgetIds(new ComponentName(context, AppWidget.class));
            onUpdate(context, manager, ids);
        }
        super.onReceive(context, intent);
    
    }
    private  void scheduleNextUpdate(Context context) {
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AppWidget.class);
        intent.setAction(ACTION_SCHEDULED_UPDATE);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    
        // Get a calendar instance for midnight tomorrow.
        Calendar at11 = Calendar.getInstance();
        at11.set(Calendar.HOUR_OF_DAY, 11);
        at11.set(Calendar.MINUTE, 30);
        at11.set(Calendar.SECOND, 1);
        at11.set(Calendar.MILLISECOND, 0);
        at11.add(Calendar.DAY_OF_YEAR, 1);
    
        // For API 19 and later, set may fire the intent a little later to save battery,
        // setExact ensures the intent goes off exactly at midnight.
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            alarmManager.set(AlarmManager.RTC_WAKEUP, at11.getTimeInMillis(), pendingIntent);
        } else {
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, at11.getTimeInMillis(), pendingIntent);
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Demigod    8 年前

    onUpdate

    onReceive