После много исследований по внедрению IntentServices и Alarms, я придумал это. Я не знаю точно, что происходит с этим кодом, поэтому мне нужна помощь в том, чтобы точно знать, что происходит.Android: Alarms and IntentServices
public class MainActivity{
//....
public void onNewItemAdded(String[] _entry){
//...
\t Intent intent = new Intent(MainActivity.this, UpdateService.class);
\t startService(intent);
}
//....
}
public class AlarmReceiver extends BroadcastReceiver {
\t @Override
\t public void onReceive(Context context, Intent intent) {
\t \t // TODO Auto-generated method stub
\t \t Intent startIntent = new Intent(context, UpdateService.class);
\t \t context.startService(startIntent);
}
public static final String ACTION_REFRESH_ALARM = "com.a.b.ACTION_REFRESH_ALARM";
}
public class UpdateService extends IntentService{
//...
@Override
\t public void onCreate() {
\t \t super.onCreate();
\t \t alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
\t \t String ALARM_ACTION = AlarmReceiver.ACTION_REFRESH_ALARM;
\t \t Intent intentToFire = new Intent(ALARM_ACTION);
\t \t alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);
\t }
\t @Override
\t protected void onHandleIntent(Intent intent) {
\t \t Context context = getApplicationContext();
\t \t SharedPreferences prefs = PreferenceManager
\t \t \t \t .getDefaultSharedPreferences(context);
\t \t int updateFreq = Integer.parseInt(prefs.getString(
\t \t \t \t PreferencesActivity.PREF_UPDATE_FREQ, "60"));
\t \t boolean autoUpdateChecked = prefs.getBoolean(
\t \t \t \t PreferencesActivity.PREF_AUTO_UPDATE, false);
\t \t if (autoUpdateChecked) {
\t \t \t int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;
\t \t \t long timeToRefresh = SystemClock.elapsedRealtime() + updateFreq
\t \t \t \t \t * 60 * 1000;
\t \t \t alarmManager.setInexactRepeating(alarmType, timeToRefresh,
\t \t \t \t \t updateFreq * 60 * 1000, alarmIntent);
\t \t }
\t \t else {
\t \t \t alarmManager.cancel(alarmIntent);
\t \t }
\t \t refreshKeywords();
\t }
}
Моя цель состоит в том, чтобы получить refreshKeywords() метод назвать каждую минуту. Кроме того, что происходит, если метод onNewItemAdded() вызывается более одного раза?
Извините, если этот вопрос глуп, я новичок.
Я надеваю Не понимаю. Где применяется метод refreshKeywords() при использовании этой реализации? Эта функция используется в качестве замены класса AlarmReceiver? –
Да, именно вы можете использовать эту функцию для своего AlarmReceiver –
Итак, как мне изменить метод onHandleIntent()? Я хочу, чтобы будильник был настроен на автоматическое обновление, только если в действии SystemPreferences указано, что он включен пользователем. Я сделал это в методе onHandleIntent(). Также, где должен быть установлен этот метод ServiceRunningBackground() и где он должен быть вызван? –