假期学习记录15(Android定时提醒的实现)


首先新建一个广播接收器

 
   //闹铃时间到了会进入这个广播,这个时候可以做一些该做的业务。 
    public class AlarmReceiver extends BroadcastReceiver {  
          
        @Override  
        public void onReceive(Context context, Intent intent) {  
        Toast.makeText(context, "闹铃响了", Toast.LENGTH_LONG).show();  
        }  
      
    }  

然后我们要在AndroidManifest注册这个接收器

<receiver android:name="com.example.alarmmanagerdemo.AlarmReceiver" android:process=":remote">  

最后activity代码


package com.example.lastgps;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;

import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.example.lastgps.myclass.AlarmReceiver;

import java.util.Calendar;
import java.util.TimeZone;

public class AlarmTest extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm_test);
        Intent intent = new Intent(AlarmTest.this, AlarmReceiver.class);
        PendingIntent sender = PendingIntent.getBroadcast(AlarmTest.this, 0, intent, 0);

        long firstTime = SystemClock.elapsedRealtime(); // 开机之后到现在的运行时间(包括睡眠时间)
        long systemTime = System.currentTimeMillis();

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        // 这里时区需要设置一下,不然会有8个小时的时间差
        calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        //设置闹钟,时分秒毫秒
        calendar.set(Calendar.MINUTE, 46);
        calendar.set(Calendar.HOUR_OF_DAY, 9);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        // 选择的定时时间
        long selectTime = calendar.getTimeInMillis();
        // 如果当前时间大于设置的时间,那么就从第二天的设定时间开始
        if(systemTime > selectTime) {
            Toast.makeText(AlarmTest.this,"设置的时间小于当前时间", Toast.LENGTH_SHORT).show();
            calendar.add(Calendar.DAY_OF_MONTH, 1);
            selectTime = calendar.getTimeInMillis();
        }
        // 计算现在时间到设定时间的时间差
        long time = selectTime - systemTime;
        firstTime += time;
        // 进行闹铃注册
        AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE);
        manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                firstTime, AlarmManager.INTERVAL_DAY, sender);
        Log.i("AlarmTest","time ==== " + time +", selectTime ===== "
                + selectTime + ", systemTime ==== " + systemTime +", firstTime === " + firstTime);
        Toast.makeText(AlarmTest.this,"设置重复闹铃成功! ", Toast.LENGTH_LONG).show();
    }
}
  


这样子就可以了

posted @ 2020-02-16 23:03  王怀宇  阅读(257)  评论(0编辑  收藏  举报