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()方法中,我们获取当前的时间,并判断是否为整点。