2014-11-01 4 views
0

После много исследований по внедрению 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() вызывается более одного раза?

Извините, если этот вопрос глуп, я новичок.

ответ

0

Если вы хотите, чтобы вы звоните refreshKeywords() метод вызывалась каждые минут почему вы используете AlarmManager как это,

private void ServiceRunningBackground() { 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
    { 
     final int restartAlarmInterval = 6000; 
     final int resetAlarmTimer = 2*1000; 
     final Intent restartIntent = new Intent(this, MyService.class); 
     restartIntent.putExtra("ALARM_RESTART_SERVICE_DIED", true); 
     final AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Handler restartServiceHandler = new Handler() 
     { 
      @Override 
      public void handleMessage(Message msg) { 
       PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, restartIntent, 0); 
       alarmMgr.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + restartAlarmInterval, pintent); 
       sendEmptyMessageDelayed(0, resetAlarmTimer); 
      } 
     }; 
     restartServiceHandler.sendEmptyMessageDelayed(0, 0); 
    } 
} 

Просто вызовите этот метод, где когда-либо вы хотите и установить время соответственно

+0

Я надеваю Не понимаю. Где применяется метод refreshKeywords() при использовании этой реализации? Эта функция используется в качестве замены класса AlarmReceiver? –

+0

Да, именно вы можете использовать эту функцию для своего AlarmReceiver –

+0

Итак, как мне изменить метод onHandleIntent()? Я хочу, чтобы будильник был настроен на автоматическое обновление, только если в действии SystemPreferences указано, что он включен пользователем. Я сделал это в методе onHandleIntent(). Также, где должен быть установлен этот метод ServiceRunningBackground() и где он должен быть вызван? –

Смежные вопросы