Android监听时间整点变化
在Android开发中,我们经常需要监听系统时间的变化,比如用户打开了一个应用,我们需要获取当前时间,并根据时间做一些相应的操作。而有时候我们可能只对时间的整点变化感兴趣,比如每到整点时弹出一个通知。本文将介绍如何在Android中监听时间的整点变化,并提供相应的代码示例。
1. 获取系统时间
要监听时间的整点变化,首先需要获取当前的系统时间。Android提供了System.currentTimeMillis()
方法来获取当前的系统时间戳,该时间戳表示从1970年1月1日 00:00:00 GMT到当前时间的毫秒数。我们可以将时间戳转换成具体的日期时间格式,以便于使用。
以下是获取当前时间的代码示例:
import java.text.SimpleDateFormat;
import java.util.Date;
public class TimeUtils {
public static String getCurrentTime() {
long currentTimeMillis = System.currentTimeMillis();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(currentTimeMillis);
return sdf.format(date);
}
}
以上代码中,我们首先使用System.currentTimeMillis()
方法获取当前的时间戳,然后使用SimpleDateFormat
类将时间戳转换成指定的日期时间格式。在这个例子中,我们将日期时间格式设置为"yyyy-MM-dd HH:mm:ss",例如"2021-01-01 12:00:00"。
2. 监听时间变化
要监听时间的整点变化,我们可以使用Android的BroadcastReceiver
类来接收系统发出的时间变化广播。具体来说,我们可以监听ACTION_TIME_TICK
广播,该广播会在每分钟的整点触发一次。
以下是监听时间变化的代码示例:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class TimeChangeReceiver extends BroadcastReceiver {
private OnTimeChangeListener mListener;
public TimeChangeReceiver(OnTimeChangeListener listener) {
mListener = listener;
}
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
if (mListener != null) {
mListener.onTimeChange();
}
}
}
public void register(Context context) {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
context.registerReceiver(this, filter);
}
public void unregister(Context context) {
context.unregisterReceiver(this);
}
public interface OnTimeChangeListener {
void onTimeChange();
}
}
以上代码中,我们定义了一个TimeChangeReceiver
类,继承自BroadcastReceiver
。在onReceive()
方法中,我们首先判断接收到的广播是否是ACTION_TIME_TICK
广播,如果是的话,就回调OnTimeChangeListener
接口的onTimeChange()
方法。在register()
方法中,我们注册了TimeChangeReceiver
类,监听系统发出的ACTION_TIME_TICK
广播。在unregister()
方法中,我们取消了对广播的监听。
3. 使用示例
下面是一个使用示例,我们在时间整点变化时弹出一个通知:
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.support.v4.app.NotificationCompat;
public class MainActivity extends AppCompatActivity implements TimeChangeReceiver.OnTimeChangeListener {
private TimeChangeReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mReceiver = new TimeChangeReceiver(this);
mReceiver.register(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mReceiver.unregister(this);
}
@Override
public void onTimeChange() {
String currentTime = TimeUtils.getCurrentTime();
if (currentTime.endsWith("00:00:00")) {
showNotification("整点通知", "当前时间:" + currentTime);
}
}
private void showNotification(String title, String content) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(content)
.setAutoCancel(true);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(0, builder.build());
}
}
以上代码中,我们在MainActivity
中注册了TimeChangeReceiver
,监听时间的整点变化。在onTimeChange()
方法中,我们获取当前的时间,并判断是否为整点。