我想每过一分钟就做点什么,例如当时间从 10:38 变为 10:39 时,我想做点什么。
做这个的最好方式是什么?
为此使用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);
}
在 Manifest 中为您的警报创建一个接收器:
<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 扩展 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
}
}
您需要通过广播接收器收听 TIME_TICK
IntentFilter timeTickIntentFilter = new IntentFilter(Intent.ACTION_TIME_TICK);
registerReceiver(YourReceiver, timeTickIntentFilter);
让服务在后台运行,持续检查指定时间,假设您想在晚上 10:00 时将手机调至静音模式。因此服务应继续检查时间是否为晚上 10:00,如果是,则执行代码以将手机设置为静音模式