Android - Каков наилучший способ что-то делать каждый раз, когда меняется время?

Я хочу делать что-то каждый раз, когда проходит минута, например, когда время меняется с 10:38 на 10:39, я хочу что-то делать.

Каков наилучший способ сделать это?

3 ответа

Вы должны слушать TIME_TICK через приемник вещания

IntentFilter timeTickIntentFilter = new IntentFilter(Intent.ACTION_TIME_TICK);
registerReceiver(YourReceiver, timeTickIntentFilter);

Используйте AlarmManager для этого.

void startSchedulerAlarm() {
    int oneMinute = 1 * (60 * 1000); //Trigger Every 1 Minute
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.setAction(AlarmReceiver.alaramIntent);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, AlarmReceiver.alarmIntentCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), oneMinute, alarmIntent);

}

void stopSchedulerAlarm() {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.setAction(AlarmReceiver.alaramIntent);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, AlarmReceiver.alarmIntentCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.cancel(alarmIntent);
}

Создайте приемник для вашей тревоги в манифесте:

    <receiver       
        android:name="{YOUR_PACKAGE_NAME}.AlarmReceiver"
        android:enabled="true"
        android:process=":remote">
        <intent-filter>
            <action android:name="{YOUR_PACKAGE_NAME}.alarmIntent"/>
        </intent-filter>
    </receiver> 

открытый класс AlarmReceiver extends BroadcastReceiver {

public static final String alaramIntent = "{YOUR_PACKAGE_NAME}.alarmIntent";
public static final int alarmIntentCode = 000054310;

private String TAG = AlarmReceiver.class.getSimpleName();

   @Override
   public void onReceive(Context context, Intent intent) {
        //Do something Here
   }
}

Поддерживайте работающую службу в фоновом режиме, которая продолжает проверять определенное время. Скажем, вы хотите переключить телефон в беззвучный режим, когда это 22:00. Поэтому служба должна продолжать проверять, не наступило ли время 22:00, и когда это произошло, выполнить код, чтобы переключить телефон в беззвучный режим.

Другие вопросы по тегам