android 闹钟定时任务 AlarmManager
16lz
2022-04-02
阅读更多
直接上代码
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设置图片变化的四种效果代码
- MSDK接入 中的各种问题
- Android(安卓)音量 获取 设置
- android 中 系统日期时间的获取
- android获取屏幕的宽度和高度
- android listview 长按弹出菜单--ContextMenu并进行删除操作
- Android复习(十)
- android之Notification的使用