android 闹钟定时任务 AlarmManager
16lz
2021-01-23
阅读更多
直接上代码
package com.example.alarmmanagerdemo;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;/** * * @ClassName: AlarmReceiver * @Description: 闹铃时间到了会进入这个广播,这个时候可以做一些该做的业务。 * @author Dahai.zhou * @date 2016年6月2日 13:38:52 * */public class AlarmReceiver extends BroadcastReceiver {@Override public void onReceive(Context context, Intent intent) {Toast.makeText(context, "闹铃响了, 可以做点事情了~~", Toast.LENGTH_LONG).show(); }}
package com.example.alarmmanagerdemo;import java.util.Calendar;import java.util.TimeZone;import android.app.Activity;import android.app.AlarmManager;import android.app.PendingIntent;import android.content.Intent;import android.os.Bundle;import android.os.SystemClock;import android.util.Log;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.TimePicker;import android.widget.Toast;/** * * @ClassName: MainActivity * @Description: 主界面 * @author Dahai.zhou * @date 2016年6月2日 13:39:38 * */public class MainActivity extends Activity {private static final String TAG = MainActivity.class.getSimpleName();private TimePicker mTimePicker;private Button mButton1;private Button mButton2;private Button mButtonCancel;private int mHour = -1;private int mMinute = -1;public static final long DAY = 1000L * 60 * 60 * 24;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获取当前时间Calendar calendar = Calendar.getInstance();calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));if(mHour == -1 && mMinute == -1) {mHour = calendar.get(Calendar.HOUR_OF_DAY);mMinute = calendar.get(Calendar.MINUTE);}mTimePicker = (TimePicker)findViewById(R.id.timePicker);mTimePicker.setCurrentHour(mHour);mTimePicker.setCurrentMinute(mMinute);mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {@Overridepublic void onTimeChanged(TimePicker view, int hourOfDay, int minute) {mHour = hourOfDay;mMinute = minute;}});mButton1 = (Button)findViewById(R.id.normal_button);mButton1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);// 过10s 执行这个闹铃Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));calendar.add(Calendar.SECOND, 10);// 进行闹铃注册AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE);manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);Toast.makeText(MainActivity.this, "设置简单闹铃成功!", Toast.LENGTH_LONG).show();}});mButton2 = (Button)findViewById(R.id.repeating_button);mButton2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); long firstTime = SystemClock.elapsedRealtime();// 开机之后到现在的运行时间(包括睡眠时间) long systemTime = System.currentTimeMillis(); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.setTimeZone(TimeZone.getTimeZone("GMT+8")); // 这里时区需要设置一下,不然会有8个小时的时间差 calendar.set(Calendar.MINUTE, mMinute); calendar.set(Calendar.HOUR_OF_DAY, mHour); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); // 选择的每天定时时间 long selectTime = calendar.getTimeInMillis(); // 如果当前时间大于设置的时间,那么就从第二天的设定时间开始 if(systemTime > selectTime) { Toast.makeText(MainActivity.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, 10*1000, sender); Log.i(TAG, "time ==== " + time + ", selectTime ===== " + selectTime + ", systemTime ==== " + systemTime + ", firstTime === " + firstTime); Toast.makeText(MainActivity.this, "设置重复闹铃成功! ", Toast.LENGTH_LONG).show();}});mButtonCancel = (Button)findViewById(R.id.cancel_button);mButtonCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); // 取消闹铃 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.cancel(sender);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
<?xml version="1.0" encoding="utf-8"?>
- AlarmManagerDemo.rar (581.6 KB)
- 下载次数: 11
更多相关文章
- Android 检测用户一段时间无操作
- Android/Java仿微信按时间长短分类显示时间戳
- android 时间戳与日期格式的互相转换 以及 自定义选择器
- 两种方式使用android时间和日期控件
- Android 时间 日期 时区
- Android 自定义 Toast 显示时间
- (安卓/android)dex2oat与应用安装时间优化
- android 时间同步