AlarmManager для запуска службы не работает - PullRequest
1 голос
/ 20 августа 2011

У меня есть класс IntentService, и я хочу использовать сигнал тревоги, чтобы служба выполняла определенную задачу каждые X часов.

Я получаю сигнал тревоги и устанавливаю его, но служба выполняет свою задачу каждые 2 секунды, а не каждые X часов; оно никогда не останавливается: BroadcastReceiver всегда стреляет Intent.

Это код:

@Override
    protected void onHandleIntent(Intent intent) {
        int alarmType = AlarmManager.RTC_WAKEUP;
        username = intent.getStringExtra("username");
        //android.os.Debug.waitForDebugger();
        alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        context = getApplicationContext();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        serviceToStart = intent.getStringExtra("serviceToStart");

        if (serviceToStart.equals("calls")) {
            String CALLS_ALARM_ACTION = "ACTION_CALLS_LOGGING";
            Intent callsIntentToFire = new Intent(CALLS_ALARM_ACTION);
            callsIntentToFire.putExtra("serviceToStart", serviceToStart);
            callsAlarmIntent = PendingIntent.getBroadcast(context, 0, callsIntentToFire, 0);
            callsUpdatefrequency = toLong(Integer.parseInt(prefs.getString(Preferences.CALLS_FREQUENCY_PREF, "0")));
            long callsTimeToUpdate = SystemClock.elapsedRealtime() + callsUpdatefrequency;
            alarms.setRepeating(alarmType, callsTimeToUpdate, callsUpdatefrequency, callsAlarmIntent);
            dumpCallsLog();

Последний метод (dumpCallsLog ()) - это метод, который обновляет удаленную БД. Я что-то упускаю или что-то не так в коде?

Это мой BroadcastReceiver код:

public class LoggingReceiver extends BroadcastReceiver {
    public static final String ACTION_CALLS_LOGGING = "ACTION_CALLS_LOGGING";

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent startIntent = new Intent(context, LoggingService.class);
        String action = intent.getStringExtra("serviceToStart");
        startIntent.putExtra("serviceToStart", action);
        context.startService(startIntent);
    }
}

1 Ответ

1 голос
/ 25 августа 2011

Готово!Мой плохой:

String CALLS_ALARM_ACTION = "ACTION_CALLS_LOGGING";
                    Intent callsIntentToFire = new Intent(CALLS_ALARM_ACTION);

                    callsIntentToFire.putExtra("serviceToStart", "dumpCalls");
                    callsIntentToFire.putExtra("username", username);

                    callsAlarmIntent = PendingIntent.getBroadcast(context, 0, callsIntentToFire, 0);

                    callsTriggerAlarmTime = AlarmManager.ELAPSED_REALTIME_WAKEUP;

                    long callsAlarmInterval = 30000L;
                    // toLong(Integer.parseInt(prefs.getString(Preferences.CALLS_FREQUENCY_PREF,
                    // "86400000")));

                    alarms.setRepeating(alarmType, callsTriggerAlarmTime,
                            callsAlarmInterval, callsAlarmIntent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...